measure aggregerende functie

Van toepassing op:gemarkeerd Databricks SQL gemarkeerd Databricks Runtime 16.4 en hoger

Retourneert de measure_column aggregatie afkomstig van de waarden van een groep. In Databricks Runtime 18.1 en hoger agg is de statistische functie een synoniem voor deze functie.

In tegenstelling tot een reguliere statistische functie zoals SUM, AVGof COUNT, geeft de MEASURE functie de aggregatie niet op. De definitie van de aggregatie wordt overgenomen van de definitie van de metrische weergave.

Het gebruik van een metrische weergave met metingen is beter dan normale weergaven, omdat hiermee de complexiteit van de onderliggende aggregaties wordt geabstraheerd terwijl de aanroeper de vrijheid krijgt om de groeperingskolommen te kiezen.

Syntaxis

measure ( measure_column ) [ FILTER ( WHERE cond ) ]

Deze functie kan niet worden aangeroepen als een vensterfunctie met behulp van de OVER component.

Argumenten

  • measure_column: Een verwijzing naar een metingkolom in een metrische weergave.

  • cond: Een optionele Booleaanse expressie in een FILTER-component waarmee de rijen worden gefilterd die worden gebruikt om de meting te berekenen.

    Van toepassing op:aangevinkt ja Databricks SQL aangevinkt ja Databricks Runtime 18.1 en hoger

Retouren

Een waarde van het type measure_column.

GEDRAG VAN FILTER-component

Wanneer u een FILTER component toepast op een meting, wordt de filtervoorwaarde toegepast op elke statistische functie in de definitie van de meting:

  • Als een statistische functie in de definitie geen FILTER component heeft, wordt de voorwaarde van de meting hierop toegepast.
  • Als een statistische functie in de definitie al een FILTER component heeft, wordt de voorwaarde van de meting gecombineerd met de bestaande met behulp van AND.

Dezelfde regels gelden recursief wanneer een meting verwijst naar een andere meting.

Voor venstermetingen wordt de FILTER component toegepast na de vensteraggregatie, gelijk aan het plaatsen van dezelfde voorwaarde in de component van WHERE de query.

In Databricks Runtime-versies lager dan 18.1 retourneert een FILTER component voor een meting een fout.

Voorbeelden

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