More advanced metrics
More advanced metric types
We're not limited to just passing measures through to our metrics, we can also combine measures to model more advanced metrics.
- 🍊 Ratio metrics are, as the name implies, about comparing two metrics as a numerator and a denominator to form a new metric, for instance the percentage of order items that are food items instead of drinks.
- 🧱 Derived metrics are when we want to write an expression that calculates a metric using multiple metrics. A classic example here is our gross profit calculated by subtracting costs from revenue.
- ➕ Cumulative metrics calculate all of a measure over a given window, such as the past week, or if no window is supplied, the all-time total of that measure.
Ratio metrics
- 🔢 We need to establish one measure that will be our numerator, and one that will be our denominator.
- 🥪 Let's calculate the percentage of our Jaffle Shop revenue that comes from food items.
- 💰 We already have our denominator, revenue, but we'll want to make a new metric for our numerator called food_revenue.
models/marts/orders.yml
- name: food_revenue
  description: The revenue from food in each order.
  label: Food Revenue
  type: simple
  type_params:
    measure: food_revenue
- 📝 Now we can set up our ratio metric.
models/marts/orders.yml
- name: food_revenue_pct
  description: The % of order revenue from food.
  label: Food Revenue %
  type: ratio
  type_params:
    numerator: food_revenue
    denominator: revenue
Derived metrics
- 🆙 Now let's really have some fun. One of the most important metrics for any business is not just revenue, but revenue growth. Let's use a derived metric to build month-over-month revenue.
- ⚙️ A derived metric has a couple key components:
- 📚 A list of metrics to build on. These can be manipulated and filtered in various way, here we'll use the offset_windowproperty to lag by a month.
- 🧮 An expression that performs a calculation with these metrics.
 
- 📚 A list of metrics to build on. These can be manipulated and filtered in various way, here we'll use the 
- With these parts we can assemble complex logic that would otherwise need to be 'frozen' in logical models.
models/marts/orders.yml
- name: revenue_growth_mom
  description: "Percentage growth of revenue compared to 1 month ago. Excluded tax"
  type: derived
  label: Revenue Growth % M/M
  type_params:
    expr: (current_revenue - revenue_prev_month) * 100 / revenue_prev_month
    metrics:
      - name: revenue
        alias: current_revenue
      - name: revenue
        offset_window: 1 month
        alias: revenue_prev_month
Cumulative metrics
- ➕ Lastly, lets build a cumulative metric. In keeping with our theme of business priorities, let's continue with revenue and build an all-time revenue metric for any given time window.
- 🪟 All we need to do is indicate the type is cumulativeand not supply awindowin thetype_params, which indicates we want cumulative for the entire time period our end users select.
models/marts/orders.yml
- name: cumulative_revenue
  description: The cumulative revenue for all orders.
  label: Cumulative Revenue (All Time)
  type: cumulative
  type_params:
    measure: revenue
Was this page helpful?
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.
0