INDEX

S’applique à :Colonne calculéeTableau calculéeMesureCalcul visuel

Récupère une ligne à une position absolue, spécifiée par le paramètre de position, dans la partition spécifiée triée selon l’ordre spécifié. Si la partition actuelle ne peut pas être déduite en une seule partition, plusieurs lignes peuvent être retournées.

Syntaxe

INDEX(<position>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Paramètres

Terme Définition
position La position absolue (basée sur 1) à partir de laquelle obtenir les données :
- <position> est positive : 1 est la première ligne, 2 est la deuxième ligne, etc.
- <position> est négative : -1 est la dernière ligne, -2 est l’avant-dernière ligne, etc.
Lorsque <position> est hors limite, zéro ou BLANK(), INDEX renvoie un tableau vide. Peut être toute expression DAX qui retourne une valeur scalaire.
relation (Facultatif) Expression de table à partir de laquelle la sortie est retournée
Si la valeur est spécifiée, toutes les colonnes de <partitionBy> doivent provenir de celle-ci ou d’une table associée.
En cas d’omission :
- <orderBy> doit être spécifié explicitement.
- Toutes les expressions <orderBy> et <partitionBy> doivent être des noms complets de colonnes et provenir d’une table unique.
- La valeur par défaut est ALLSELECTED() de toutes les colonnes dans <orderBy> et <partitionBy>.
axis (Facultatif) Axe de la forme du visuel. Disponible seulement dans les calculs de visuel et remplace <relation>.
orderBy (Facultatif) Clause ORDERBY() contenant les expressions qui définissent le tri de chaque partition.
En cas d’omission :
- la <relation> doit être spécifiée explicitement.
- Par défaut, le tri est effectué par chaque colonne dans une <relation> qui n’est pas déjà spécifiée dans <partitionBy>.
vides (Facultatif) Énumération qui définit comment gérer des valeurs vides lors du tri.
Ce paramètre est réservé à un usage futur.
Actuellement, la seule valeur prise en charge est DEFAULT, où le comportement pour les valeurs numériques est que les valeurs vides sont classées entre les valeurs zéro et les valeurs négatives. Le comportement des chaînes est que les valeurs vides sont triées avant toutes les chaînes, y compris les chaînes vides.
partitionBy (Facultatif) Clause PARTITIONBY() contenant les colonnes qui définissent la façon dont la <relation> est partitionnée.
En cas d’omission, la <relation> est traitée comme une partition unique.
matchBy (Facultatif) Clause MATCHBY() contenant les colonnes qui définissent la manière de faire correspondre les données et d’identifier la ligne actuelle.
reset (Facultatif) Disponible seulement dans les calculs de visuel. Indique si le calcul est réinitialisé et à quel niveau de la hiérarchie des colonnes de la forme du visuel. Les valeurs acceptées sont : NONE, LOWESTPARENT, HIGHESTPARENT ou un entier. Le comportement dépend du signe de l’entier :
- S’il est égal à zéro ou s’il est omis, le calcul n’est pas réinitialisé. Équivalent à NONE.
- S’il est positif, l’entier identifie la colonne en commençant par la plus élevée, indépendamment du fragment. HIGHESTPARENT équivaut à 1.
- S’il est négatif, l’entier identifie la colonne en commençant par la plus basse, par rapport au fragment actuel. LOWESTPARENT équivaut à -1.

Valeur retournée

Une ligne à une position absolue.

Notes

Chaque colonne <partitionBy> et <matchBy> doit avoir une valeur externe correspondante permettant de définir la « partition actuelle » à traiter, avec le comportement suivant :

  • S’il existe exactement une colonne externe correspondante, sa valeur est utilisée.
  • S’il n’existe aucune colonne externe correspondante :
    • INDEX détermine d’abord toutes les colonnes <partitionBy> et <matchBy> qui n’ont aucune colonne externe correspondante.
    • Pour chaque combinaison de valeurs existantes pour ces colonnes dans le contexte parent d’INDEX, INDEX est évalué, et une ligne est retournée.
    • La sortie finale d’INDEX est une union de ces lignes.
  • S’il existe plusieurs colonnes externes correspondantes, une erreur est retournée.

Si <matchBy> est présent, INDEX essaie d’utiliser les colonnes <matchBy> et <partitionBy> pour identifier la ligne.
Si <matchBy> n’est pas présent et que les colonnes spécifiées dans <orderBy> et <partitionBy> ne peuvent pas identifier de manière unique chaque ligne dans la <relation> :

  • INDEX essaie de trouver le moins de colonnes supplémentaires requises pour identifier chaque ligne de manière unique.
  • Si de telles colonnes sont trouvées, INDEX ajoute automatiquement ces nouvelles colonnes à <orderBy>, et chaque partition est triée à l’aide de ce nouvel ensemble de colonnes OrderBy.
  • Si ces colonnes sont introuvables, une erreur est retournée.

Une table vide est retournée si :

  • La valeur externe correspondante d’une colonne PartitionBy n’existe pas dans la <relation>.
  • La valeur <position> fait référence à une position qui n’existe pas dans la partition.

Si INDEX est utilisé dans une colonne calculée définie sur la même table que <relation> et que <orderBy> est omis, une erreur est retournée.

<reset> peut être utilisé seulement dans les calculs de visuel, et ne peut pas être utilisé en combinaison avec <orderBy> ou <partitionBy>. Si <reset> est présent, <axis> peut être spécifié, mais pas <relation>.

Exemple 1 : colonne calculée

La requête DAX suivante :

EVALUATE INDEX(1, ALL(DimDate[CalendarYear]))

retourne la table suivante :

DimDate[CalendarYear]
2005

Exemple 2 : colonne calculée

La requête DAX suivante :

EVALUATE
SUMMARIZECOLUMNS (
    FactInternetSales[ProductKey],
    DimDate[MonthNumberOfYear],
    FILTER (
            VALUES(FactInternetSales[ProductKey]),
            [ProductKey] < 222
    ),
    "CurrentSales", SUM(FactInternetSales[SalesAmount]),
    "LastMonthSales",
    CALCULATE (
        SUM(FactInternetSales[SalesAmount]),
        INDEX(-1, ORDERBY(DimDate[MonthNumberOfYear]))
    )
)
ORDER BY [ProductKey], [MonthNumberOfYear]

retourne la table suivante :

FactInternetSales[ProductKey] DimDate[MonthNumberOfYear] [CurrentSales] [LastMonthSales]
214 1 5423,45 8047,7
214 2 4968,58 8047,7
214 3 5598,4 8047,7
214 4 5073,55 8047,7
214 5 5248,5 8047,7
214 6 7487,86 8047,7
214 7 7382,89 8047,7
214 8 6543,13 8047,7
214 9 6788,06 8047,7
214 10 6858,04 8047,7
214 11 8607,54 8047,7
214 12 8047,7 8047,7
217 1 5353,47 7767,78
217 2 4268,78 7767,78
217 3 5773,35 7767,78
217 4 5738,36 7767,78
217 5 6158,24 7767,78
217 6 6998 7767,78
217 7 5563,41 7767,78
217 8 5913,31 7767,78
217 9 5913,31 7767,78
217 10 6823,05 7767,78
217 11 6683,09 7767,78
217 12 7767,78 7767,78

Exemple 3 : calcul de visuel

Les requêtes DAX de calcul de visuel suivantes :

SalesComparedToBeginningOfYear = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, ROWS, HIGHESTPARENT))

SalesComparedToBeginningOfQuarter = [SalesAmount] - CALCULATE(SUM([SalesAmount]), INDEX(1, , -1))

Améliorez une table afin qu’elle contienne pour chaque mois :
- le montant total des ventes ;
- la différence avec le premier mois de l’année respective ;
- et la différence avec le premier mois du trimestre respectif.

La capture d’écran ci-dessous montre la matrice du visuel et l’expression du premier calcul de visuel :

Calcul visuel DAX

DÉCALAGE
ORDERBY
PARTITIONBY
WINDOW
RANK
ROWNUMBER