Expressions d'ensemble internes et externes
Les expressions d'ensemble peuvent être utilisées à l'intérieur et à l'extérieur des fonctions d'agrégation et sont encadrées par des accolades.
Lorsque vous utilisez une expression d'ensemble à l'intérieur d'une fonction d'agrégation, cela peut prendre la forme suivante :
Expression d'ensemble interne
Sum( {$<Year={2021}>} Sales )Utilisez une expression d'ensemble à l'extérieur de la fonction d'agrégation si vous avez des expressions avec plusieurs agrégations et si vous souhaitez éviter d'écrire la même expression d'ensemble dans chaque fonction d'agrégation.
Si vous utilisez une expression d'ensemble externe, elle doit être placée au début de l'étendue.
Expression d'ensemble externe
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)Si vous utilisez une expression d'ensemble à l'extérieur de la fonction d'agrégation, vous pouvez également l'appliquer aux mesures principales existantes.
Expression d'ensemble externe appliquée à une mesure principale
{<Year={2021}>} [Master Measure]Une expression d'ensemble utilisée à l'extérieur des fonctions d'agrégation affecte l'expression toute entière, sauf si elle est placée entre parenthèses lorsque les parenthèses définissent l'étendue. Dans l'exemple de définition de l'étendue lexicale ci-dessous, l'expression d'ensemble est uniquement appliquée à l'agrégation à l'intérieur des parenthèses.
Définition de l'étendue lexicale
( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)Règles
Étendue lexicale
L'expression d'ensemble affecte l'expression toute entière, sauf si elle est placée entre parenthèses. Dans ce cas, les parenthèses définissent l'étendue lexicale.
Position
L'expression d'ensemble doit être placée au début de l'étendue lexicale.
Contexte
Le contexte est la sélection pertinente pour l'expression. En règle générale, le contexte est toujours l'état par défaut de la sélection active. En revanche, si un objet est défini sur un état alternatif, le contexte est l'état alternatif de la sélection active.
Vous pouvez également définir un contexte sous la forme d'une expression d'ensemble externe.
Héritage
Les expressions d'ensemble internes sont prioritaires sur les expressions d'ensemble externes. Si l'expression d'ensemble interne contient un identificateur d'ensemble, cela remplace le contexte défini dans l'expression d'ensemble externe. Dans le cas contraire, les expressions d'ensemble interne et externe sont toutes les deux évaluées.
Expression d'ensemble interne avec identificateur d'ensemble
Dans l'expression ci-dessus, l'expression d'ensemble interne Count({1} distinct OrderNumber) est constituée de l'identificateur d'ensemble {1}. Lorsque cette expression d'ensemble interne est évaluée, l'étendue définie dans l'expression d'ensemble externe {<Year={2023}>} n'est pas appliquée.
Expressions d'ensemble internes sans identificateurs d'ensemble
Dans l'expression ci-dessus, les expressions d'ensemble internes Sum ({<Status={'Confirmed'}>} Sales_Stream1) et Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2) ne contiennent pas d'identificateurs d'ensemble. Par conséquent, l'expression d'ensemble externe {<Year={2023}>} et les deux expressions d'ensemble internes sont toutes appliquées lors de l'évaluation du résultat.
Affectation d'ensembles d'éléments
L'affectation d'ensembles d'éléments détermine le mode de fusion des deux sélections. Si un signe égal normal est utilisé, la sélection de l'expression d'ensemble interne est prioritaire. Sinon, l'opérateur d'ensemble implicite est utilisé.
{<Field={value}>} - cette sélection interne remplace toute sélection externe dans “Field”.
{<Field+={value}>} - cette sélection interne est fusionnée avec la sélection externe dans “Field”, via l'opérateur d'union.
{<Field*={value}>} - cette sélection interne est fusionnée avec la sélection externe dans “Field”, via l'opérateur d'intersection.
Héritage en plusieurs étapes
L'héritage peut avoir lieu en plusieurs étapes. Exemples :
Sélection active → Sum(Amount)
La fonction d'agrégation utilisera le contexte, qui, ici, est la sélection active.
Sélection active → {<Set1>} Sum(Amount)
Set1 héritera de la sélection active et le résultat sera le contexte pour la fonction d'agrégation.
Sélection active → {<Set1>} ({<Set2>} Sum(Amount))
Set2 héritera de Set1, qui, à son tour, héritera de la sélection active, et le résultat sera le contexte pour la fonction d'agrégation.
Héritage de chaînes d'expressions d'ensemble internes et externes
Il existe d'autres considérations à prendre en compte en matière d'héritage lorsque l'on utilise plusieurs expressions d'ensemble dans des chaînes complexes, en particulier lorsqu'une expression d'ensemble externe est suivie d'autres expressions d'ensemble externes et/ou d'une expression d'ensemble interne. Pour plus de détails, consultez Chaînes de plusieurs expressions d'ensemble externes et internes.
Fonction Aggr()
La fonction Aggr() crée une agrégation imbriquée qui comporte deux agrégations indépendantes. Dans l'exemple ci-dessous, une fonction Count() est calculée pour chaque valeur de Dim, et le tableau obtenu est agrégé via la fonction Sum().
Sum(Aggr(Count(X),Dim))Count() est l'agrégation interne et Sum() l'agrégation externe.
L'agrégation interne n'hérite d'aucun contexte de l'agrégation externe.
L'agrégation interne hérite du contexte de la fonction Aggr(), qui contient une expression d'ensemble.
La fonction Aggr() et la fonction d'agrégation externe héritent toutes les deux du contexte d'une expression d'ensemble externe.
Chaînes de plusieurs expressions d'ensemble externes et internes
Notez qu'il est possible d'avoir plus d'une expression d'ensemble externe. Dans cet exemple, nous avons deux expressions d'ensemble externes et une interne :
Les expressions d'ensemble seront appliquées de gauche à droite. Cela signifie que si deux expressions d'ensemble utilisent des ensembles contradictoires, l'expression la plus à droite aura la priorité.
Bien qu'il n'y ait pas de limite quant au nombre d'expressions d'ensemble externes chaînées de cette manière, le nombre d'expressions d'ensemble internes est limité à une expression. Le fait d'avoir plus d'une expression d'ensemble interne l'une à côté de l'autre ne produira aucune d'erreur, mais seule l'expression la plus à droite sera utilisée lors de l'évaluation.
Héritage d'expression d'ensemble
Lorsqu'une expression d'agrégation contient plus d'une expression d'ensemble dans le cadre d'une chaîne, les expressions d'ensemble sont évaluées une par une de gauche à droite. Le résultat de chaque expression d'ensemble est un groupe d'ensembles, potentiellement un pour chaque dimension. Les ensembles sont transmis à l'expression d'ensemble suivante, qui peut apporter y d'autres modifications avant d'être transmise à l'expression suivante.
Tant que chaque expression d'ensemble opère sur des dimensions différentes, il n'existera pas de conflit entre elles et tous les ensembles seront préservés jusqu'à la fin de la chaîne (et appliqués lors de l'agrégation). Il existe une exception à cette règle, qui s'applique parfois lorsqu'une dimension d'une expression d'ensemble a produit un ensemble vide. Pour plus d'informations, consultez :
Ensembles de sélections vides
Lorsqu'une dimension d'une expression d'ensemble est évaluée, il est possible que l'ensemble ne contienne aucune donnée. C'est ce qu'on appelle un ensemble vide. Les ensembles vides peuvent se produire dans de nombreux scénarios, par exemple :
Définition d'expression incorrecte. Par exemple, lors de la recherche d'une valeur 2025 avec une expression d'ensemble {<OrderYear={‘2025’}>}, l'expression s'écrit {<OrderYear={‘0025’}>}.
Au cours de l'analyse, une sélection est effectuée dans une dimension différente de celle référencée dans l'expression et cette sélection entraîne l'absence de données disponibles pour la dimension d'expression d'ensemble. Par exemple, un utilisateur effectue une sélection pour Region='Europe' et applique des filtres d'expression d'ensemble pour {<ProductCategory={‘Shirts’}>} Sum (Sales). Si aucune chemise n'est vendue en Europe, l'expression d'ensemble contient un ensemble vide.
L'ensemble vide est défini explicitement dans l'expression. Ce n'est ni courant, ni utile, mais c'est techniquement possible. Par exemple : {<Year={}>}
Effacement d'ensemble de sélection implicite
Si le résultat de l'application d'une expression d'ensemble est un ensemble vide pour l'une des dimensions (consultez Ensembles de sélections vides) et si une expression d'ensemble supplémentaire est appliquée par la suite, l'ensemble de sélections pour cette dimension sera effacé (restauré à l'état d'ensemble complet) juste avant l'application de l'expression d'ensemble suivante. Un ensemble de sélections effacé signifie que toutes les valeurs sont incluses. Notez toutefois que cet effacement ne se produit que si une ou plusieurs expressions d'ensemble externes supplémentaires sont appliquées après l'expression d'ensemble pour laquelle l'ensemble vide est produit.
Voici un exemple de cas où il se produit un ensemble de sélections effacé :
{<Year={}>} {<Region={"Europe"}>} Sum( Sales )Year={} créera l'ensemble vide pour la dimension Year. Cela signifie que l'ensemble de sélections pour Year est effacé lorsque l'ensemble est transmis à l'expression d'ensemble suivante, qui contient Region={Europe}. Notez que l'effacement de la sélection ne se produit que pour une seule dimension. Les ensembles des autres dimensions (y compris les ensembles de la même expression d'ensemble) continueront à être transmis sans modification.
Voici un autre exemple de cas d'ensemble de sélections effacé :
{<Year={}, Product={"XI345"}>} {<Region={"Europe"}>} Sum(Sales)Dans l'exemple ci-dessus, voici ce qu'il se produit :
Les ensembles de sélections Product={"XI345"} et Region={"Europe"} sont appliqués.
Year={} n'est pas appliqué. En effet, cet ensemble est effacé lorsque la dernière expression d'ensemble ({<Region={"Europe"}>}) est appliquée.
Le déplacement d'un composant d'expression d'ensemble vers la dernière expression d'ensemble externe empêchera l'effacement implicite de se produire. Prenons cet exemple :
{<Product={"XI345"}>} {<Year={}, Region={"Europe"}>} Sum(Sales)Ici, nous avons déplacé l'expression Year dans la dernière expression d'ensemble de la chaîne. Cela empêchera l'effacement implicite de se produire et l'ensemble vide de la dimension Year sera effectivement utilisé pour l'agrégation Sum.
Dans tous les cas, il peut se produire un comportement indésirable lorsque des ensembles de sélections sont effacés. Pour améliorer l'expérience d'analyse et faciliter l'écriture de chaînes d'expressions d'ensemble, utilisez l'indicateur de préservation d'ensemble vide. Pour plus d'informations, consultez Indicateur de préservation d'ensemble vide (expressions d'ensemble externes).
Indicateur de préservation d'ensemble vide (expressions d'ensemble externes)
Utilisez le symbole & (l'indicateur de préservation d'ensemble vide) pour simplifier le modèle d'évaluation des expressions d'ensemble externes. Par exemple :
{& <Year={}, Product={XI345}>} {<Region={Europe}>} Sum( Sales )Dans cet exemple, Year={} définit un ensemble de sélections vide pour Year. Sans le symbole &, l'expression {<Region={Europe}>} entraînerait l'effacement de l'ensemble de sélections vide Year, ce qui aurait pour effet d'utiliser toutes les données dans le calcul d'agrégation. Le symbole & force l'agrégation à respecter l'ensemble de sélections vide Year, ce qui permet d'obtenir une sortie plus compréhensible.
Pour des informations détaillées complètes sur l'indicateur de préservation d'ensemble vide, consultez Indicateur de préservation d'ensemble vide.