measure Aggregatfunktion

Gilt für:mit Häkchen markiert Ja Databricks SQL mit Häkchen markiert Ja Databricks Runtime 16.4 und höher

Gibt die aus den Werten einer Gruppe aggregierten measure_column zurück. In Databricks Runtime 18.1 und höher agg ist die Aggregatfunktion ein Synonym für diese Funktion.

Im Gegensatz zu einer regulären Aggregatfunktion wie SUM, AVGoder COUNTgibt die MEASURE Funktion die Aggregation nicht an. Sie erbt die Definition der Aggregation von der Definition der Metrikansicht.

Die Verwendung einer Metrikansicht mit Measures ist den regulären Ansichten überlegen, da sie die Komplexität der zugrunde liegenden Aggregationen abstrahiert und dem Aufrufer die Freiheit gibt, die Gruppierungsspalten auszuwählen.

Syntax

measure ( measure_column ) [ FILTER ( WHERE cond ) ]

Diese Funktion kann nicht mithilfe der Klausel als OVER aufgerufen werden.

Argumente

  • measure_column: Ein Verweis auf eine Messspalte in einer Metrikansicht.

  • cond: Ein optionaler boolescher Ausdruck in einer FILTER-Klausel , die die zum Berechnen des Measures verwendeten Zeilen filtert.

    Gilt für:markiert als ja Databricks SQL markiert als ja Databricks Runtime 18.1 und höher

Rückkehr

Ein Wert des Typs von measure_column.

FILTER-Klauselverhalten

Wenn Sie eine FILTER Klausel auf ein Measure anwenden, wird die Filterbedingung auf jede Aggregatfunktion in der Definition des Measures angewendet:

  • Wenn eine Aggregatfunktion in der Definition keine FILTER Klausel aufweist, wird die Bedingung des Measures darauf angewendet.
  • Wenn eine Aggregatfunktion in der Definition bereits über eine FILTER Klausel verfügt, wird die Bedingung des Measures mit dem vorhandenen kombiniert.AND

Dieselben Regeln gelten rekursiv, wenn ein Measure auf ein anderes Measure verweist.

Bei Fenstermaßen wird die FILTER Klausel nach der Fensteraggregation angewendet, äquivalent zum Platzieren derselben Bedingung in der Abfrageklausel WHERE .

In Databricks-Runtime-Versionen unter 18.1 gibt eine FILTER Klausel für ein Measure einen Fehler zurück.

Beispiele

-- 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;