measure 集計関数

適用対象:チェックマークが付いている Databricks SQL チェックマークが付いている Databricks Runtime 16.4 以降

グループの値から集計された measure_column を返します。 Databricks Runtime 18.1 以降では、 agg 集計関数はこの関数 のシノニムです。

SUMAVGCOUNTなどの通常の集計関数とは異なり、MEASURE関数は集計を指定しません。 メトリック ビューの定義から集計の定義を継承します。

メトリック ビューをメジャーと共に使用すると、基になる集計の複雑さが抽象化され、呼び出し元はグループ化列を自由に選択できるため、通常のビューよりも優れています。

構文

measure ( measure_column ) [ FILTER ( WHERE cond ) ]

この関数は、句を使用してOVERとして呼び出すことはできません。

論争

  • measure_column: メトリックビューの測定列への参照。

  • cond: メジャーの計算に使用される行をフィルター処理する FILTER 句 の省略可能なブール式。

    適用対象:はい Databricks SQL はい Databricks Runtime 18.1 以降

返品ポリシー

measure_columnの型の値。

FILTER 句の動作

FILTER句をメジャーに適用すると、フィルター条件はメジャーの定義内のすべての集計関数に適用されます。

  • 定義内の集計関数に FILTER 句がない場合は、メジャーの条件が適用されます。
  • 定義内の集計関数に既に FILTER 句がある場合、メジャーの条件は、 ANDを使用して既存の条件と組み合わされます。

メジャーが別のメジャーを参照する場合も、同じルールが再帰的に適用されます。

ウィンドウ メジャーの場合、FILTER句は、クエリの WHERE 句に同じ条件を配置するのと同じように、ウィンドウ集計のに適用されます。

Databricks Runtime バージョンが 18.1 より前の場合、メジャーの FILTER 句はエラーを返します。

例示

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