Kibana Painless Scripted Fields - kibana

I'm new to Kibana. I've been tasked with replicating an excel report into a dashboard.
I want to use a data table to display my values and also have a calculated field for percentages.
The percentiles metric is not what I am trying to use to perform my calculations.
In the excel report the percentages are calculated using a formula like this :
=I20/$I$28*100
It's a relatively simple formula I want to replicate in Kibana. Is there a way to create a scripted field in Painless or is there an even easier way to do this?
Some assistance would be much appreciated.
Thanks in advance.

Figured it out.
return 100 * doc['SD_TOTAL'].value / 81857

Related

Conditional place data into a prebuilt report

It's quite an interesting challenge, and I can't say that I entirely know how/the best way to go about it.
Basically I have a data set, I have attached a few picture to try and show you what I am working with. The data was randomly generated but it similar to what I am working with.
I am wanting to take the data, then input the date and value into the report based on the category, and date. The even more challenging part of it is that I need to have to report be filled out for each unique id. So it will have to create many different reports, and then fill it out.
Any idea/questions? I have no idea how to go about it.
I am experienced in R, excel, some python and SQL (but very little).
If you have the dataset in R, you could write a function that takes the parameters needed, performs the aggregation, and writes the result to excel.
It is not clear to me what exactly the data aggregation part is. Without reproducible data it is hard to go into more detail.

Live Data Visualization using R and mongoDB

My aim is to create a visual data representation of Temperature data coming from a street light via sensors. I am picking that data from the mongoDB database. Basically in my knowledge and experience, I used Shiny And R to show static data graphs from the database, but I am unable to find any way of showing continuously updating data in a moving line chart. I hope you get the picture.
Please refer to this example using node.js(I want to achieve results similar to this but using R)
https://www.youtube.com/watch?v=nauRfoNNEQs
My questions is, is there a way to show real time data visualization in R or I have to necessarily use node.js with plotly?
I'm not sure how "live" you can get the stream, but you might want to look into this:
https://shiny.rstudio.com/reference/shiny/latest/reactivePoll.html
http://shiny.rstudio.com/gallery/reactive-poll-and-file-reader.html

Shinobi charts recreating every time

I am using shinobicharts ChartFragment. I have scenario that each time I have to load the chart with different data within same activity i.e I am not recreating that activity. But I am failed to do this. It not recreating and not clearing the series which I previously set to that chart.
Can anybody help, how can I remove old series in that chart and load new series each time? I tried shinobiChart().removeSeries() but it didn't work.
Thanks
If you wish to dynamically load new data, you do not necessarily need to remove the series. Instead you can simply add data points to your data adapter. You will find the following methods useful:
https://www.shinobicontrols.com/docs/ShinobiControls/ShinobiChartsAndroid/1.7.2/Premium/Normal/apidocs/docs/reference/com/shinobicontrols/charts/DataAdapter.html#add(int, com.shinobicontrols.charts.Data)
https://www.shinobicontrols.com/docs/ShinobiControls/ShinobiChartsAndroid/1.7.2/Premium/Normal/apidocs/docs/reference/com/shinobicontrols/charts/DataAdapter.html#add(com.shinobicontrols.charts.Data)
https://www.shinobicontrols.com/docs/ShinobiControls/ShinobiChartsAndroid/1.7.2/Premium/Normal/apidocs/docs/reference/com/shinobicontrols/charts/DataAdapter.html#addAll(int, java.util.Collection>)
https://www.shinobicontrols.com/docs/ShinobiControls/ShinobiChartsAndroid/1.7.2/Premium/Normal/apidocs/docs/reference/com/shinobicontrols/charts/DataAdapter.html#addAll(java.util.Collection>)
In these api docs you will also find similar methods to remove data points.
One thing to bear in mind is that adding or removing a data point to / from a SimpleDataAdapter class instance which is set on a series will trigger a redraw of that series. If you are working with large numbers of data points, this might not be performant. In this case a more suitable approach might be to temporarily remove the data adapter from the series, perform the modification to the data and then re add the data adapter back to the series. Alternatively you might like to implement your own DataAdapter and control when you instruct the chart to redraw that series (via the fireUpdateHandler method).
You can of course remove the series itself and add a new one, but this approach is potentially inefficient. That said, if you wish to remove a series from a chart you need to use the following method:
https://www.shinobicontrols.com/docs/ShinobiControls/ShinobiChartsAndroid/1.7.2/Premium/Normal/apidocs/docs/reference/com/shinobicontrols/charts/ShinobiChart.html#removeSeries(com.shinobicontrols.charts.Series)
In order for this method to be successful you will first need to obtain a reference to the correct series, which you must pass to this method as a parameter.
I hope that you find this information useful. If you need any further help please if possible post any relevant code, such as that which you use to create your fragments and set up your chart.
Thanks and kind regards,
Kai.
Disclaimer - I work for ShinobiControls.

Interactive page in tableau

I am building a BI application
Data Source: Excel file and Microsoft Database
Data Analysis: R
Data Reporting: Tableau Public
My use case is to take 5-6 inputs from the user. Inputs will in like a drop down and multiple selection box. Based on the inputs I need to do the analysis and display it on Tableau.
Question:
How to take user inputs in tableau? like a form? Or what is a alternative for taking user inputs and pass it to Tableau/R?
If I think of making an Web page then how to pass value from page to R and Tableau and return the analysis back to web page?
Please provide you valuable inputs or some alternative to achieve my requirements.
Thank you.
For my use case I am avoiding Tableau due to time constraint, and will be using RStudio for integrating the data and doing the analysis. For the user input and visualization part I will be using Shiny by RStudio ( http://www.rstudio.com/products/shiny/ ). Do check their website.
In future if I find some solution with Tableau then will surely post in here.
Thanks for all the suport.
You can create parameters, and set them on the sheet, so the user can input values there.
http://kb.tableausoftware.com/articles/knowledgebase/using-parameters
Depending on what you're doing, you can use Tableau connection with R. Pretty simple to use, but does not cover everything R can do
http://www.tableausoftware.com/new-features/r-integration
http://kb.tableausoftware.com/articles/knowledgebase/r-implementation-notes

R Models with Factors in Tableau

I'm attempting to build a model for sales in R that is then integrated into Tableau so I can look at the predictions as they relate to the actual values. The model I'm building for sales is in R, and I'm trying to integrate it into Tableau by creating a calculated field that uses the model to give the predicted value for each record using the SCRIPT_REAL function in Tableau. The records are all coming from a MySQL database connection. The issue that I'm having comes from using factors in my model (for example, month).
If I want to group all of the predictions by day of week, Tableau can't perform the calculation because it tries to aggregate each field I'm using before passing it into the model. When it tries to aggregate month, not all of the values are the same, so it instead returns a "". Obviously a prediction value then can't be reached because there is no value associated with a "". Essentially what I'm trying to do is get a prediction value for each record that I have, and then aggregate those prediction values in various ways.
Okay, now I can understand a little bit better what you're talking about. A twbx with dummy data (and even dummy model, but that generates the same problem you're facing) would help even more, but let me try to say a couple of things
One thing that is important to understand is that SCRIPT functions are like table calculations, i.e., they are performed only with aggregated fields, they are computed last (after all aggregations, measures and regular calculations) and you can define the level of aggregation you want.
So, if you want to display values on a daily basis, put your date field on page, go to the day level, and for the calculation partition by DAY(date_field). If you want by week, same thing.
I find table calculations (including R scripts) very useful when they are an end, i.e. the calculation is the answer. It's not so useful (or better, not so easily manipulable) when it's an end, like an intermediate step before a final calculation to get to the answer. That is mainly because the level of aggregation is based on the fields that are on page. So, for instance, if I have multiple orders from different clients, and want to assess what's the average order value by customer, table calculation is great, WINDOW_AVG(SUM(order_value)) partitioned by customer. If, for some reason, I want to sum all this values, then it's tricky. I can't do it directly, as the avg order value is not stored anywhere, and cannot be retrieved without all the clients being on page. So what I usually do is to create the table with all customers, export it to mdb, and reconnect in Tableau.
I said all this because it might be your problem, when you say "Tableau can't perform the calculation because it tries to aggregate each field I'm using before passing it into the model". Yes, Tableau does that and there's nothing you can do about it, but figure out a way around it. Creating an intermediate table in Tableau, exporting it, and connecting to it again in Tableau might be an answer. Performing the calculations in R, exporting it and then connecting to Tableau might be another way.
But again, without actually seeing what you're trying to do, it's hard to say what you need to do

Resources