type: metrics_view

display_name: Product Revenue
description: >-
  Daily revenue by product and currency, built on the SummingMergeTree rollup the
  Streamling pipeline maintains. Every column in the table is a signed delta, so
  each measure is a SUM of deltas rather than a count of rows — a row here is a
  change to a total, not an order.

model: product_revenue_daily

timeseries: revenue_date
smallest_time_grain: day

dimensions:
  # Named `product` rather than `product_id`: ClickHouse-backed dimensions that
  # use `expression` may not reuse a column name from the table.
  - name: product
    display_name: Product
    # The column is UInt64; casting keeps Rill treating it as something to slice
    # by rather than a numeric to aggregate.
    expression: toString(product_id)

  - name: currency
    display_name: Currency
    column: currency

measures:
  - name: orders
    display_name: Orders
    expression: SUM(orders_delta)
    description: Order items currently contributing revenue. Retracted items net to zero.
    format_preset: humanize

  - name: units_sold
    display_name: Units Sold
    expression: SUM(units_delta)
    format_preset: humanize

  - name: gross_revenue
    display_name: Gross Revenue
    expression: SUM(gross_revenue_delta)
    format_d3: ",.2f"

  - name: discounts
    display_name: Discounts
    expression: SUM(discount_delta)
    format_d3: ",.2f"

  - name: refunds
    display_name: Refunds
    expression: SUM(refund_delta)
    format_d3: ",.2f"

  - name: net_revenue
    display_name: Net Revenue
    expression: SUM(net_revenue_delta)
    description: Gross revenue less discounts and refunds.
    format_d3: ",.2f"

  - name: avg_order_value
    display_name: Avg Order Value
    expression: SUM(net_revenue_delta) / NULLIF(SUM(orders_delta), 0)
    format_d3: ",.2f"
    valid_percent_of_total: false

  - name: refund_rate
    display_name: Refund Rate
    expression: SUM(refund_delta) / NULLIF(SUM(gross_revenue_delta), 0)
    format_preset: percentage
    valid_percent_of_total: false

explore:
  display_name: Product Revenue
  time_ranges:
    - P7D
    - P30D
    - P90D
    - rill-MTD
    - rill-YTD
  defaults:
    time_range: P30D
    measures:
      - net_revenue
      - gross_revenue
      - orders
      - units_sold
