OFFSET

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

Retourne une seule ligne qui est positionnée avant ou après la ligne actuelle dans la même table, avec un décalage donné. Si la ligne actuelle ne peut pas être déduite en une seule ligne, plusieurs lignes peuvent être retournées.

Syntaxe

OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Paramètres

Terme Définition
delta Nombre de lignes avant (valeur négative) ou après (valeur positive) de la ligne actuelle à partir desquelles les données doivent être obtenues. Peut être toute expression DAX qui retourne une valeur scalaire.
relation (Facultatif) Expression de table à partir de laquelle la ligne de 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 colonnes <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 ou plusieurs lignes de la <relation>.

Notes

À l’exception des colonnes ajoutées par les fonctions de table DAX, chaque colonne dans la <relation>, quand <matchBy> n’est pas présent, ou chaque colonne dans <matchBy> et <partitionBy>, quand <matchBy> est présent, doit avoir une valeur externe correspondante permettant de définir la ligne 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, alors :
    • OFFSET détermine d’abord toutes les colonnes qui n’ont aucune colonne externe correspondante.
    • Pour chaque combinaison de valeurs existantes pour ces colonnes dans le contexte parent de OFFSET, OFFSET est évalué, et une ligne est retournée.
    • La sortie finale d’OFFSET est une union de ces lignes.
  • S’il existe plusieurs colonnes externes correspondantes, une erreur est retournée.

Si toutes les colonnes de <relation> ont été ajoutées par les fonctions de table DAX, une erreur est retournée.

Si <matchBy> est présent, OFFSET 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> :

  • OFFSET 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, OFFSET 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 OrderBy ou PartitionBy n’existe pas dans la <relation>.
  • La valeur <delta> entraîne un décalage vers une ligne qui n’existe pas dans la partition.

Si OFFSET 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 :

DEFINE
VAR vRelation = SUMMARIZECOLUMNS ( 
                    DimProductCategory[EnglishProductCategoryName], 
                    DimDate[CalendarYear], 
                    "CurrentYearSales", SUM(FactInternetSales[SalesAmount]) 
                  )
EVALUATE
ADDCOLUMNS (
    vRelation, 
    "PreviousYearSales", 
    SELECTCOLUMNS(
        OFFSET ( 
                -1, 
                vRelation, 
                ORDERBY([CalendarYear]), 
                PARTITIONBY([EnglishProductCategoryName])
        ),
        [CurrentYearSales]
    )
)

Retourne une table qui résume le total des ventes pour chaque catégorie de produit et année civile, ainsi que le total des ventes de cette catégorie au cours de l’année précédente.

Exemple 2 : mesure

La requête DAX suivante :

DEFINE
MEASURE DimProduct[CurrentYearSales] = SUM(FactInternetSales[SalesAmount])
MEASURE DimProduct[PreviousYearSales] = CALCULATE(SUM(FactInternetSales[SalesAmount]), OFFSET(-1, , ORDERBY(DimDate[CalendarYear])))
EVALUATE
SUMMARIZECOLUMNS (
    DimDate[CalendarYear],
    "CurrentYearSales", DimProduct[CurrentYearSales],
    "PreviousYearSales", DimProduct[PreviousYearSales]
)

Utilise OFFSET() dans une mesure pour renvoyer une table qui résume les ventes totales pour chaque année civile et les ventes totales de l’année précédente.

Exemple 3 : colonne calculée

La requête DAX suivante :

EVALUATE
ADDCOLUMNS (
    FactInternetSales,
    "Previous Sales Amount",
        SELECTCOLUMNS (
            OFFSET (
                -1,
                FactInternetSales,
                ORDERBY ( FactInternetSales[SalesAmount], DESC ),
                PARTITIONBY ( FactInternetSales[ProductKey] ),
                MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
            ),
            FactInternetSales[SalesAmount]
        )
)

Retourne la table FactInternetSales en ajoutant une colonne qui indique pour chaque vente le montant de sa vente précédente, du même produit, dans l’ordre décroissant du montant des ventes, la vente actuelle étant identifiée par SalesOrderNumber et SalesOrderLineNumber. Sans MATCHBY, la requête retournerait une erreur, car la table FactInternetSales ne comprend pas de colonnes de clés.

Exemple 4 : calcul de visuel

La requête DAX de calcul de visuel suivante :

SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))

Retourne la différence dans le total des ventes entre chaque mois et le mois précédent au cours de la même année.

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

Calcul visuel DAX

INDEX
ORDERBY
PARTITIONBY
MATCHBY
WINDOW
RANK
ROWNUMBER