Fonctions d'agrégation
La famille de fonctions appelée fonctions d'agrégation se compose de fonctions qui utilisent plusieurs valeurs de champ comme entrée et qui renvoient un seul résultat par groupe, où le regroupement est défini par une dimension de graphique ou une clause group by dans l'instruction de script.
Les fonctions d'agrégation comprennent, entre autres, Sum(), Count(), Min() et Max().
La plupart des fonctions d'agrégation s'utilisent à la fois dans le script de chargement de données et dans les expressions de graphique, même si leur syntaxe diffère.
Le paramètre de la fonction d'agrégation ne doit pas comprendre d'autres fonctions d'agrégation, à moins que ces agrégations internes ne contiennent le qualificateur TOTAL. Pour des agrégations imbriquées plus complexes, utilisez la fonction avancée Aggr en combinaison avec une dimension spécifiée.
Lors du nommage d'une entité, évitez d'attribuer le même nom à plus d'un champ, d'une variable ou d'une mesure. Il existe un ordre de précédence strict pour la résolution des conflits entre les entités portant des noms identiques. Cet ordre est reflété dans tous les objets ou contextes dans lesquels ces entités sont utilisées. Cet ordre des priorités est le suivant :
-
À l'intérieur d'une agrégation, un champ est prioritaire sur une variable. Les étiquettes de mesure n'ont pas d'importance dans les agrégations et ne sont pas priorisées.
-
En dehors d'une agrégation, une étiquette de mesure est prioritaire sur une variable, qui, à son tour, est prioritaire sur un nom de champ.
-
De plus, en dehors d'une agrégation, une mesure peut être réutilisée en référençant son étiquette, sauf si l'étiquette est en fait une étiquette calculée. Dans ce cas, la mesure perd en signification afin de réduire le risque d'auto-référence et le nom sera toujours interprété d'abord comme une étiquette de mesure, puis comme un nom de champ, et enfin comme un nom de variable.
Utilisation des fonctions d'agrégation dans un script de chargement de données
Les fonctions d'agrégation peuvent uniquement être utilisées dans des instructions LOAD et SELECT.
Utilisation des fonctions d'agrégation dans les expressions de graphique
Le paramètre de la fonction d'agrégation ne doit pas comprendre d'autres fonctions d'agrégation, à moins que ces agrégations internes ne contiennent le qualificateur TOTAL. Pour des agrégations imbriquées plus complexes, utilisez la fonction avancée Aggr en combinaison avec une dimension spécifiée.
Une fonction d'agrégation regroupe l'ensemble des enregistrements possibles définis par la sélection. Il est toutefois possible de définir un ensemble alternatif d'enregistrements en utilisant une expression d'ensemble dans une analyse d'ensembles.
Voir : Analyse d'ensembles
Mode de calcul des agrégations
Une agrégation effectue une boucle sur les enregistrements d'une table spécifique, agrégeant ainsi les enregistrements qu'elle contient. Par exemple, Count(<Field>) compte le nombre d'enregistrements de la table dans laquelle réside <Field>. Si vous souhaitez agréger uniquement les valeurs de champ distinctes, vous devez utiliser la clause distinct comme suit : Count(distinct <Field>).
Si la fonction d'agrégation contient des champs provenant de différentes tables, elle effectue une boucle sur les enregistrements du produit croisé des tables des champs constitutifs. Cela affecte les performances. C'est pourquoi il est recommandé d'éviter de telles agrégations, en particulier lorsque vous avez de grandes quantités de données.
Agrégation de champs clés
Le mode de calcul des agrégations signifie que vous ne pouvez pas agréger des champs clés, car il est difficile de savoir quelle table utiliser pour l'agrégation. Par exemple, si le champ <Key> relie deux tables, il est difficile de savoir si Count(<Key>) doit renvoyer le nombre d'enregistrements de la première ou de la deuxième table.
En revanche, si vous utilisez la clause distinct, l'agrégation est bien définie et peut être calculée pour un champ clé lié sur deux tables.
Si vous utilisez un champ clé à l'intérieur d'une fonction d'agrégation sans la clause distinct, Qlik Sense renverra un nombre qui risque de n'avoir aucun sens. La solution consiste à utiliser la clause distinct ou une copie de la clé – une copie qui réside dans une seule table.
Par exemple, dans les tables suivantes, ProductId est la clé entre les tables.
Count(ProductId) peut être compté soit dans la table Products (qui contient un seul enregistrement par produit – ProductId est la clé primaire), soit dans la table Details (qui contient très probablement plusieurs enregistrements par produit). Si vous souhaitez compter le nombre de produits distincts, vous devez utiliser Count(distinct ProductId). Si vous souhaitez compter le nombre de lignes d'une table spécifique, vous ne devez pas utiliser la clé.
Agrégations de champs clés contenus dans trois ou davantage de tables
Le préfixe distinct fonctionne uniquement avec des champs clés liant jusqu'à deux tables. Lors du regroupement d'une agrégation sur un champ clé qui existe dans trois ou davantage de tables, toute opération nécessitant des informations de fréquence pour un champ renverra NULL. Dans le cas d'un champ clé liant trois ou davantage de tables, une copie non-clé du champ doit être utilisée à la place.