Description
This function calculated the average value of a metric based on the time or any dimension that quantifies the metric.
/* Calculation Script name - Average Description - calculate the average value of a metric based on the time or any dimension that quantifies the metric. Product Version - v66 Script Version - 1.0 ***Disclaimer - This is proprietary code of Whiz.AI. If you want to build on top of this computation script please make a copy/clone of this script and then alter the script which is copied or cloned. When version upgrade happens there are chances that this script may get modified hence any customization done by customer/partner developer may be overwritten. Key Functions - 1.Function name:compute purpose : calculate average input parameters :metadataQuery output parameters : dataframe Key variables - query : implicit variable baseMetric :metric on which computation will be performed aggregations :list of aggregation outputmetricName : final computation name (dynamically crated) dataAccessManager :This class is exposed to scripts by Framework through implicit variable dataAccessManager. This acts as gateway to data exposed by the framework. A query can be fired through this instance to get the data. */ //** Start of script (() => { log.info("************************ WhizCalAverage *******************"); function compute(query) { //Name for metadata query, this helps logging and identification of query. query.name("WhizCalAverage_Query"); // get all the aggregation from entity-configuration in list format const avgParam = addonProps["defaultFilter"]["dynamicArgs"]["avgParam"]; //Returns the column set for this aggregation //it will give primary aggregation column like TRx,NRx const baseMetric = primaryAggr.column(); // converts list to aggregation as druid understands the aggregation. const aggregations = Aggregation.parseList(avgParam); //Creates shallow copy of this aggregation setting the name of the new aggregation as per specified value. //This is mostly helpful if aggregation is to be renamed, discarding the original aggregation aggregations[2] = aggregations[2].copyWithName(outputMetricName); //Adds the given aggregation/post-aggregation to the query. query.aggrs(aggregations); /* Replaces given column to all places applicable; currently Dimensions, Aggregations, Filters, SortOrders might be extended to more known places , specifically useful for changing marker column patterns with actual column You must match the first parameter to the column name supplied in the configuration's numerator aggregation. */ query.replaceColumn("__baseMetric", baseMetric); //Replaces any ordering clauses in the query with given column with ordering on new column query.replaceOrderingColumn(baseMetric, outputMetricName); //Fires the MetadataQuery passed, returns DataFrame representing the response of the query return dataAccessManager.fireQuery(query); } return compute(query); })();
Following Configuration needs to be done for Function in Admin Console :-
/* ** configuration to be set in calculation metric ** default_filter: In this section's dynamicArgs sub-section, we will have the information related to the necessary aggregations required. avgParam : avgParam is arraylist of metadataQuery configuration. This block elements are passed to script as a parameter. avgParam[0] : Map at index 0 in a avgParam list its a numerator part where in column we will pass Base metric. type : In here we specify which type of calculation we want. Column : It is used to specify on which column given type of operation needs to perform. avgParam[1] : Map at index 1 in a avgParam list Its a denominator part where type of calculation is decided type : In here we specify which type of denominator calculation we want. Column : It is used to specify on which column countDistinct operation needs to perform. avgParam[2] : Here division Aggregation is specified. value : name of aggregation used in numerator denominator : name of aggregation used in denominator divByZeroResponse : if denominator is 0, this value should be returned **The configuration below should be copied and pasted to calculate the Average.* */ "default_filter": { "dynamicArgs": { "avgParam": [ { "name": "numMetric", "type": "sum", "column": "__baseMetric" }, { "name": "Count", "type": "count" }, { "name": "Average", "type": "division", "value": "numMetric", "denominator": "Count", "divByZeroResponse": 0 } ] } }
Was this article helpful?
That’s Great!
Thank you for your feedback
Sorry! We couldn't be helpful
Thank you for your feedback
Feedback sent
We appreciate your effort and will try to fix the article