Expressions de niveau de détail (LOD)
Les expressions de niveau de détail (LOD) vous permettent de spécifier une granularité à laquelle les agrégations sont calculées, différente du niveau de détail de vos visualisations. Cette page explique comment utiliser les expressions LOD dans les tableaux de bord AI/BI.
Que sont les expressions de niveau de détail ?
Les expressions de niveau de détail vous permettent de spécifier exactement les dimensions à utiliser lors du calcul d'un agrégat, quelles que soient les dimensions présentes dans votre visualisation. Cela vous donne un contrôle précis sur la portée de vos calculs. Les expressions de niveau de détail peuvent être des dimensions ou des mesures.
Il existe deux types d'expressions de niveau de détail :
- Niveau de détail fixe : agrège sur un ensemble de dimensions prédéfini spécifiées dans l'expression elle-même, en ignorant toutes les autres dimensions de la visualisation.
- Niveau de détail plus grossier : agrégez à un niveau plus grossier que la visualisation en excluant une dimension spécifique de l’ensemble de regroupement.
Les expressions de niveau de détail sont créées à l'aide de fonctions de fenêtre dans les calculs de dataset dans des modèles d'utilisation spécifiques.
Quand utiliser des expressions de niveau de détail
Utilisez des expressions de niveau de détail lorsque vous avez besoin de :
- Calculer les pourcentages du total (par exemple, la part de chaque catégorie dans le total des ventes).
- Comparez les valeurs individuelles aux agrégats de l'ensemble du dataset (par exemple, Ventes par rapport aux Ventes moyennes).
- Créez des métriques au niveau des cohortes ou des segments qui restent constantes à travers différents regroupements.
- Effectuer des agrégations à plusieurs niveaux dans un seul calcul.
Définir des expressions à un niveau de détail fixe
Une expression de niveau de détail fixe calcule un agrégat à la granularité que vous définissez, en ignorant les dimensions de votre visualisation. Les expressions de niveau de détail fixe sont des dimensions et sont implémentées à l'aide de fonctions de fenêtre scalaires avec des clauses PARTITION BY.
Syntaxe
<AGGREGATE_FUNCTION>(<column>) OVER (PARTITION BY <dimension1>, <dimension2>, ...)
Pour agréger l'ensemble du dataset, omettez la clause PARTITION BY et laissez des parenthèses vides après OVER.
Quand utiliser un niveau de détail fixe
Utilisez des expressions de niveau de détail fixe lorsque vous avez besoin :
- Aucune dépendance aux groupements de visualisation : métriques ayant un partitionnement statique pour toutes les utilisations.
- **Agrégats au niveau du dataset** : agrégats globaux comparés à d'autres niveaux de lignes ou regroupements (par exemple, pourcentage des ventes totales par région).
- Hiérarchies à plusieurs niveaux : Métriques de niveau détaillé et de niveau agrégé dans la même visualisation.
Exemple : Totaux régionaux des ventes
Supposons que vous ayez un dataset de ventes et que vous souhaitiez afficher les ventes de chaque produit ainsi que les ventes totales pour sa région. Voici l'échantillon de données :
Région | Produit | Ventes |
|---|---|---|
Ouest | Ordinateur portable | 5 000 |
Ouest | Souris | 500 |
Est | Ordinateur portable | 6000 |
Est | Surveillance | 3 000 |
Pour calculer les ventes totales par région, utilisez :
SUM(Sales) OVER (PARTITION BY Region)
Résultat :
Région | Produit | Ventes | Total par région |
|---|---|---|---|
Ouest | Ordinateur portable | 5 000 | 5 500 |
Ouest | Souris | 500 | 5 500 |
Est | Ordinateur portable | 6000 | 9000 |
Est | Surveillance | 3 000 | 9000 |
Chaque ligne indique les ventes de chaque produit et le total fixe pour sa région. Le total de la région reste constant, quelle que soit la façon dont vous filtrez ou regroupez par produit.
Exemple : Pourcentage du total
Les expressions de niveau de détail fixe peuvent être composées en des expressions plus complexes, y compris des mesures calculées effectuant des calculs de « pourcentage du total ». Pour ce faire, vous pouvez référencer des expressions de niveau de détail fixe au sein d’une expression de mesure afin qu’elles soient dynamiques par rapport aux regroupements de visualisation.
Par exemple, nous pouvons d'abord définir total_sales comme une expression de niveau de détail fixe en tant que calcul autonome opérant sur l'ensemble du dataset :
SUM(sales) OVER ()
Nous pouvons ensuite faire référence à l'expression de niveau de détail fixe dans une définition de mesure calculée :
SUM(Sales) / ANY_VALUE(total_sales)
L'expression ci-dessus peut être utilisée comme mesure dans des visualisations qui regroupent par n'importe quelle dimension, telle que le produit, afin de montrer le pourcentage des ventes totales de chaque produit distinct.
Une expression de niveau de détail fixe doit être encapsulée dans une fonction d'agrégation pour être utilisée dans un calcul de mesure. Si le résultat de l'expression de niveau de détail fixe devrait être constant et répété au sein des lignes d'un groupe, une fonction comme ANY_VALUE peut être utilisée pour renvoyer une valeur unique des résultats agrégés, comme illustré dans l'exemple ci-dessus.
Filtrage sur des expressions de niveau de détail fixe
Étant donné que les expressions de niveau de détail fixe sont calculées avant l'application des regroupements et des filtres de visualisation, si vous souhaitez qu'elles soient affectées par des filtres dynamiques sur votre tableau de bord, vous devez définir ces filtres comme des parameter qui affectent le texte sous-jacent du dataset SQL. Pour plus de détails sur les parameter de tableau de bord, consultez Travailler avec les parameter de tableau de bord.
Définition des expressions à un niveau de détail plus grossier
Les expressions à un niveau de détail plus grossier calculent un agrégat à une granularité plus grossière que la granularité de la visualisation en excluant une ou plusieurs dimensions de l’ensemble de regroupement de la visualisation. De telles expressions sont des mesures et sont implémentées à l'aide de fonctions de fenêtre d'agrégation avec une clause PARTITION BY qui utilise * pour représenter toutes les partitions héritées de la query environnante.
Syntaxe
<AGGREGATE_EXPRESSION> AGGREGATE OVER (
PARTITION BY * EXCEPT (<field> [, ...])
)
Dans cette syntaxe :
PARTITION BY *représente toutes les partitions héritées du regroupement de la visualisationEXCEPT (<field> [, ...])spécifie les dimensions à exclure de ces partitions
Pour plus de détails, consultez Fonctions d'agrégation de fenêtre.
Exemples :
Exclure une seule dimension :
SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region))
Exclure plusieurs dimensions :
SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region, Product))
Combinez les exclusions avec les agrégations partielles :
SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Customer) ORDER BY Date TRAILING 7 DAY)
Quand utiliser un niveau de détail plus grossier
Utilisez des expressions avec un niveau de détail plus grossier lorsque vous avez besoin :
- Regroupements dynamiques : Calculer des pourcentages ou des agrégats qui s'adaptent aux regroupements de visualisation (par exemple, le pourcentage du total pour toute dimension sélectionnée)
- Agrégations tenant compte des filtres : Calculer à une granularité plus grossière tout en respectant les filtres du tableau de bord (à l’exception de ceux sur les dimensions exclues)
Exemple : Pourcentage du total
Le cas d'utilisation le plus courant pour les expressions de niveau de détail plus grossier est le calcul d'un pourcentage de la valeur totale. Pour calculer un pourcentage des ventes totales par Region, mais au sein d'une partition dynamique :
SUM(Sales) / (SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region)))
Cette expression :
- Calcule les Ventes totales dans le partitionnement de la visualisation, tels que
RegionetProduct. - Calcule les ventes totales dans le partitionnement de la visualisation, à l'exclusion de
Region(agrégation sur toutes les valeursProduct). - Divise les deux pour obtenir un pourcentage représentant la part du total des ventes que chaque
Regioncontribue pour chaqueProduct.
Pour exclure plusieurs dimensions :
SUM(Sales) / (SUM(Sales) AGGREGATE OVER (PARTITION BY * EXCEPT (Region, Product)))
Cela calcule le pourcentage des Ventes totales en plus des sous-totaux des appariements Region et Product.
Exemples
Fréquence des ventes de produits
Le calcul du nombre de ventes pour chaque produit est simple, mais le calcul du nombre total de produits au sein de plages de ventes spécifiques nécessite une approche différente. Par exemple, réfléchissez à la manière dont vous créeriez un histogramme qui affiche le nombre de produits regroupés par tranches de volume de ventes.
Calculs personnalisés :
- Définir
sale_countcomme une expression de niveau de détail fixe :COUNT(*) OVER (PARTITION BY Product)
Utilisation : créez un histogramme groupé par sale_count sur l'axe des X, et sélectionnez COUNT(*) sur l'axe des Y.
Comparez à la moyenne de la cohorte
Comment la taille des transactions se compare-t-elle à la taille moyenne des transactions dans la même région ?
Calculs personnalisés :
- Définir
average_deal_amount_by_regioncomme une expression de niveau de détail fixe :AVG(deal_amount) OVER (PARTITION BY Region) - Définir
percentage_of_region_averagecommedeal_amount - average_deal_amount_by_region
Les deux expressions ci-dessus peuvent également être combinées en un seul calcul.
Utilisation : définissez une table et sélectionnez percentage_of_region_average ainsi que toute autre dimension nécessaire à la visualisation
Limitations
DISTINCT dans les fonctions de fenêtre scalaires
Vous ne pouvez pas utiliser DISTINCT directement dans les fonctions de fenêtre scalaires. Par exemple, cela ne fonctionne pas :
COUNT(DISTINCT customer_id) OVER (PARTITION BY region)
Utilisez plutôt ARRAY_SIZE avec COLLECT_SET:
ARRAY_SIZE(COLLECT_SET(customer_id) OVER (PARTITION BY region))
Fonctions de fenêtre scalaires d'agrégation
Vous ne pouvez pas agréger directement une fonction de fenêtre scalaire (utilisée pour un niveau de détail fixe) lors de la création d'une expression de mesure.
Modèle 1 : définissez la fonction de fenêtre comme un calcul de dimension distinct et référencez-le dans l'expression de mesure, comme dans l'exemple de pourcentage du total ci-dessus.
Schéma 2 : Alternativement, pour les agrégats décomposables comme SUM, vous pouvez utiliser l'agrégation imbriquée, qui calcule d'abord l'agrégat interne (non fenêtré) dans chaque groupe, puis agrège les résultats de groupe dans un second passage :
SUM(quantity) / SUM(SUM(quantity)) OVER ()
Ce modèle fonctionne pour des fonctions comme SUM, MIN, MAX et COUNT, mais pas pour des fonctions comme MEDIAN ou PERCENTILE qui ne sont pas décomposables. Notez attentivement l'ordre des Opérations tel que défini par les parenthèses ; une expression comme SUM(SUM(quantity) OVER ()), bien que similaire, ne sera pas reconnue comme valide et devra être exprimée en utilisant le premier modèle de cette section.
N'utilisez pas le modèle 2 dans un tableau croisé dynamique. Cela pourrait entraîner des résultats inattendus, car la fonction de fenêtre s'applique après le regroupement, ce qui fait que les valeurs sont comptées plus d'une fois. Utilisez le modèle 1 à la place.
Ressources supplémentaires
- Que sont les calculs personnalisés ?: créez des calculs réutilisables qui peuvent référencer d'autres calculs.
- Définir les calculs sur une fenêtre: La syntaxe sous-jacente qui alimente les expressions de niveau de détail.
- Référence des fonctions de calcul personnalisées: liste complète des fonctions d'agrégation et de fenêtre disponibles.
- Utiliser des expressions de niveau de détail (LOD) dans les vues d'indicateur: expressions LOD dans les vues d'indicateur.