Skip to main content

Dynamic Metrics Selection

knowledge checkpoint

A grasp of these concepts will help you understand this documentation better:

Introduction

Using param fields, we can build charts with dropdown that allow users to change the metric dynamically.

Dynamic Metrics Selection

Dynamic Metrics Selection

Assuming that you have a model with 3 metrics: total_orders, revenue, and total_users. You want to build a dashboard that let user pick which measure to be used in your report.

Model sales_model {

measure total_orders { }
measure revenue { }
measure total_users { }

}

This can be implemented using Parameter Field and AQL Expression

Step 1: Create a Parameter Field

First, create a Parameter Field in the model.

Model sales_model {

measure total_orders { }
measure revenue { }
measure total_users { }


param metric_selector {
label: 'Metric Selector'
type: 'text'
allowed_values: ['Total Orders', 'Revenue', 'Total Users']
}

}

Step 2: Create a Dynamic Metric field

Create a Dynamic Metric that changes based on the selected parameter value.

Model sales_model {

measure total_orders { }
measure revenue { }
measure total_users { }

param metric_selector { }

measure dynamic_metric {
definition: @aql case(
when: 'Total Orders' in sales_model.measure_selector
, then: sales_model.total_orders

, when: 'Revenue' in sales_model.measure_selector
, then: sales_model.revenue

, when: 'Total Users' in sales_model.measure_selector
, then: sales_model.total_users
) ;;
}

}

Step 3: Use Dynamic Metrics in the report

In the report, you can use Dynamic Metrics with another dimension.

Step 4: Use Parameter Field in the dashboard filter

In the dashboard filter, you can use Measure Selector Parameter Field to dynamically choose which measure to use in the report.

Advanced: Metrics selection at Dataset level

If the list of metrics are defined in Dataset instead of a single model:

  1. Create a separate model to contain the param
Model param_model {
type: 'query' // can be either `table` or `query` model

query: @sql select 1 ;; // Dummy query

param metric_selector {
label: 'Metric Selector'
type: 'text'
allowed_values: ['Revenue', 'Total Orders', 'Total Users']
}
}
  1. Add the param_model to the Dataset and define the dynamic_metrics at the dataset level
Dataset ecommerce { 

models: [countries, cities, users, orders, param_model]

relationships: [ ]

metric revenue { }
metric total_orders { }
metric total_users { }

metric dynamic_metrics {
label: 'Dynamic Metrics'
type: 'number'
definition: @aql
case(
when: 'Revenue' in param_model.metric_selector
, then: revenue

, when: 'Total Orders' in param_model.metric_selector
, then: total_orders

, when: 'Total Users' in param_model.metric_selector
, then: total_users
)
;;
}
}

Let us know what you think about this document :)