Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S’applique à :
Databricks SQL
Databricks Runtime 16.4 et versions ultérieures
Retourne l’agrégat measure_column à partir des valeurs d’un groupe. Dans Databricks Runtime 18.1 et versions ultérieures, agg la fonction d’agrégation est un synonyme de cette fonction.
Contrairement à une fonction d’agrégation régulière telle que SUM, AVGou COUNT, la MEASURE fonction ne spécifie pas l’agrégation.
Il hérite de la définition de l’agrégation de la définition de la vue des métriques.
L’utilisation d’une vue métrique avec des mesures est supérieure aux vues régulières, car elle extrait la complexité des agrégations sous-jacentes tout en donnant à l’appelant la liberté de choisir les colonnes de regroupement.
Syntaxe
measure ( measure_column ) [ FILTER ( WHERE cond ) ]
Cette fonction ne peut pas être appelée en tant que fonction de fenêtre à l’aide de la OVER clause.
Les arguments
measure_column : référence à une colonne de mesure dans une vue de métrique.
cond: expression booléenne facultative dans une clause FILTER qui filtre les lignes utilisées pour calculer la mesure.S’applique à :
Databricks SQL
Databricks Runtime 18.1 et versions ultérieures
Retours
Valeur du type de measure_column.
Comportement de clause FILTER
Lorsque vous appliquez une FILTER clause à une mesure, la condition de filtre est appliquée à chaque fonction d’agrégation dans la définition de la mesure :
- Si une fonction d’agrégation dans la définition n’a aucune
FILTERclause, la condition de la mesure est appliquée à celle-ci. - Si une fonction d’agrégation dans la définition a déjà une
FILTERclause, la condition de la mesure est combinée à celle existante à l’aideANDde .
Les mêmes règles s’appliquent de manière récursive lorsqu’une mesure fait référence à une autre mesure.
Pour les mesures de fenêtre, la FILTER clause est appliquée après l’agrégation de fenêtre, ce qui équivaut à placer la même condition dans la clause de WHERE la requête.
Dans les versions de Databricks Runtime inférieures à 18.1, une FILTER clause sur une mesure retourne une erreur.
Exemples
-- 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;