measure agregační funkce

Platí pro:označený jako ano Databricks SQL označený jako ano Databricks Runtime 16.4 a vyšší

measure_column Vrátí agregovanou hodnotu z hodnot skupiny. V Databricks Runtime 18.1 a novějších agg je agregační funkce synonymem pro tuto funkci.

Na rozdíl od běžné agregační funkce, jako je SUM, AVGnebo COUNT, MEASURE funkce neurčí agregaci. Dědí definici agregace z definice metrického zobrazení.

Použití metrického zobrazení s měřítky je lepší než běžná zobrazení, protože zjednodušuje složitost podkladových agregací a nabízí uživateli možnost volného výběru seskupovacích sloupců.

Syntaxe

measure ( measure_column ) [ FILTER ( WHERE cond ) ]

Tuto funkci nelze vyvolat jako funkci okna pomocí OVER klauzule.

Argumenty

  • measure_column: Odkaz na sloupec míry v zobrazení metriky.

  • cond: Volitelný logický výraz v klauzuli FILTER , který filtruje řádky použité k výpočtu míry.

    Platí pro:zaškrtnuto jako ano Databricks SQL zaškrtnuto jako ano Databricks Runtime 18.1 a vyšší

Návraty

Hodnota typu measure_column.

Chování klauzule FILTER

Při použití FILTER klauzule na míru se podmínka filtru použije na každou agregační funkci v definici míry:

  • Pokud agregační funkce v definici nemá žádnou FILTER klauzuli, použije se na ni podmínka míry.
  • Pokud už agregační funkce v definici obsahuje FILTER klauzuli, podmínka míry se zkombinuje s existující funkcí pomocí AND.

Stejná pravidla platí rekurzivně, když míra odkazuje na jinou míru.

U měr FILTER oken se klauzule použije za agregací okna, která odpovídá umístění stejné podmínky do klauzule dotazu WHERE .

Ve verzích Databricks Runtime nižších než 18.1 FILTER vrátí klauzule míry chybu.

Příklady

-- A metric view with a measure column 4 metric columns
CREATE OR REPLACE VIEW region_sales_metrics
  (month COMMENT 'Month order was made',
   status,
   order_priority,
   count_orders COMMENT 'Count of orders',
   total_Revenue,
   total_Revenue_p_Customer,
   total_revenue_for_open_orders)
  WITH METRICS
  LANGUAGE YAML
  COMMENT 'A metric view for regional sales metrics.'
  AS $$
   version: 0.1
   source: samples.tpch.orders
   filter: o_orderdate > '1990-01-01'
   dimensions:
   - name: month
     expr: date_trunc('MONTH', o_orderdate)
   - name: status
     expr: case
       when o_orderstatus = 'O' then 'Open'
       when o_orderstatus = 'P' then 'Processing'
       when o_orderstatus = 'F' then 'Fulfilled'
       end
   - name: order_priority
     expr: split(o_orderpriority, '-')[1]
   measures:
   - name: count_orders
     expr: count(1)
   - name: total_revenue
     expr: SUM(o_totalprice)
   - name: total_revenue_per_customer
     expr: SUM(o_totalprice) / count(distinct o_custkey)
   - name: total_revenue_for_open_orders
     expr: SUM(o_totalprice) filter (where o_orderstatus='O')
  $$;

-- Tracking total_revenue_per_customer by month in 1995
> SELECT extract(month from month) as month,
    measure(total_revenue_per_customer)::bigint AS total_revenue_per_customer
  FROM region_sales_metrics
  WHERE extract(year FROM month) = 1995
  GROUP BY ALL
  ORDER BY ALL;
  month	 total_revenue_per_customer
  -----  --------------------------
   1     167727
   2     166237
   3     167349
   4     167604
   5     166483
   6     167402
   7     167272
   8     167435
   9     166633
  10     167441
  11     167286
  12     167542

-- Tracking total_revenue_per_customer by month and status in 1995
> SELECT extract(month from month) as month,
    status,
    measure(total_revenue_per_customer)::bigint AS total_revenue_per_customer
  FROM region_sales_metrics
  WHERE extract(year FROM month) = 1995
  GROUP BY ALL
  ORDER BY ALL;
  month  status      total_revenue_per_customer
  -----  ---------   --------------------------
   1     Fulfilled   167727
   2     Fulfilled   161720
   2    Open          40203
   2    Processing   193412
   3    Fulfilled    121816
   3    Open          52424
   3    Processing   196304
   4    Fulfilled     80405
   4    Open          75630
   4    Processing   196136
   5    Fulfilled     53460
   5    Open         115344
   5    Processing   196147
   6    Fulfilled     42479
   6    Open         160390
   6    Processing   193461
   7    Open         167272
   8    Open         167435
   9    Open         166633
   10   Open         167441
   11   Open         167286
   12   Open         167542

-- Compare total revenue to revenue from fulfilled orders by month in 1995.
-- The FILTER condition is pushed down to the SUM aggregate in the total_revenue definition.
> SELECT extract(month from month) as month,
    measure(total_revenue)::bigint AS total_revenue,
    measure(total_revenue) FILTER (WHERE status = 'Fulfilled') AS fulfilled_revenue
  FROM region_sales_metrics
  WHERE extract(year FROM month) = 1995
  GROUP BY ALL
  ORDER BY ALL;