Partager via


OFFSET

s’applique à :colonne calculéetable calculéemesurecalcul visuel

Retourne une seule ligne positionnée avant ou après l'ligne actuelle dans la même table, par un décalage donné. Si la ligne actuelle ne peut pas être déduite à 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 de laquelle obtenir les données. Il peut s’agir de n’importe quelle expression DAX qui retourne une valeur scalaire.
relation (Facultatif) Expression de table à partir de laquelle la ligne de sortie est retournée.
Si spécifiée, toutes les colonnes de partitionBy doivent provenir de celle-ci ou d’une table associée.
s’il est omis :
- orderBy doit être spécifié explicitement.
- Toutes les expressions orderBy et partitionBy doivent être des noms de colonnes complets et proviennent d’une table unique.
: valeur par défaut ALLSELECTED() de toutes les colonnes dans orderBy et partitionBy.
axis (Facultatif) Axe de la forme visuelle. Disponible uniquement dans les calculs visuels et remplace relation.
orderBy (Facultatif) Clause ORDERBY() contenant les expressions qui définissent la façon dont chaque partition est triée.
s’il est omis :
- relation doit être spécifié explicitement.
: la commande par défaut par chaque colonne de relation qui n’est pas déjà spécifiée dans partitionBy.
blanks (Facultatif) Énumération qui définit comment gérer les valeurs vides lors du tri de l'relation ou axis.
Les valeurs prises en charge sont les suivantes :
  • DEFAULT (valeur par défaut), où le comportement des valeurs numériques est des valeurs vides sont classés entre zéro et valeurs négatives. Le comportement des chaînes est des valeurs vides classées avant toutes les chaînes, y compris les chaînes vides.
  • FIRST, les espaces sont toujours classés au début, quel que soit l’ordre croissant ou décroissant.
  • LAST, les espaces sont toujours triés à la fin, quel que soit l’ordre croissant ou décroissant.

Remarque, lorsque le paramètre blanks et les vides dans la fonction ORDERBY() () sur les expressions individuelles sont tous deux spécifiés, blanks sur l’expression orderBy individuelle prend la priorité pour l’expression orderBy appropriée, et les expressions orderBy sans blanks être spécifiées respecteront le paramètre blanks sur la fonction parente.
partitionBy (Facultatif) Clause PARTITIONBY() contenant les colonnes qui définissent la façon dont relation est partitionnée. En cas d’omission, relation est traité comme une partition unique.
matchBy (Facultatif) Clause MATCHBY() contenant les colonnes qui définissent comment faire correspondre les données et identifier la ligne actuelle.
reset (Facultatif) Disponible uniquement dans les calculs visuels. Indique si le calcul est réinitialisé et au niveau de la hiérarchie des colonnes de la forme visuelle. Les valeurs acceptées sont : une référence de champ à une colonne dans la forme visuelle actuelle, NONE (valeur par défaut), LOWESTPARENT, HIGHESTPARENTou un entier. Le comportement dépend du signe entier :
- Si zéro ou omis, le calcul ne se réinitialise pas. Équivalent à NONE.
- Si positif, l’entier identifie la colonne à partir du plus haut, indépendamment du grain. HIGHESTPARENT équivaut à 1.
- Si négatif, l’entier identifie la colonne à partir de la plus basse, par rapport au grain actuel. LOWESTPARENT équivaut à -1.

Valeur de retour

Une ou plusieurs lignes de relation.

Remarques

À l’exception des colonnes ajoutées par DAX fonctions de table, chaque colonne de relation, lorsque matchBy n’est pas présente, ou chaque colonne dans matchBy et partitionBy, lorsque matchBy est présente, doit avoir une valeur externe correspondante pour aider à définir la ligne actuelle sur laquelle fonctionner, 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, puis :
    • 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ée et une ligne est retournée.
    • OFFSETla sortie finale est une union de ces lignes.
  • S’il existe plusieurs colonnes externes correspondantes, une erreur est retournée.

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

Si matchBy est présente, OFFSET essaie d’utiliser matchBy et partitionBy colonnes 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 relation, puis :

  • OFFSET tenterez de trouver le nombre minimum de colonnes supplémentaires requises pour identifier de manière unique chaque ligne.
  • Si de telles colonnes sont disponibles, OFFSET ajoute automatiquement ces nouvelles colonnes à orderBy, et chaque partition est triée à l’aide de ce nouvel ensemble de colonnes OrderBy.
  • Si de telles 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 relation.
  • La valeur delta provoque 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 relationet que orderBy est omis, une erreur est retournée.

reset peuvent être utilisés uniquement dans les calculs visuels et ne peuvent pas être utilisés en combinaison avec orderBy ou partitionBy. Si reset est présente, axis peut être spécifié, mais relation ne peut pas le faire.

Exemple 1 : colonne calculée

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 un tableau qui récapitule 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

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 retourner une table qui résume le total des ventes pour chaque année civile et le total des ventes pour l’année précédente.

Exemple 3 : colonne calculée

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 avec l’ajout d’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, avec la vente actuelle identifiée par son SalesOrderNumber et SalesOrderLineNumber. Sans MATCHBY, la requête retourne une erreur, car il n’existe aucune colonne clé dans la table FactInternetSales.

Exemple 4 : calcul visuel

Le calcul visuel suivant DAX requête :

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

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

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

DAX de calcul visuel

INDEX ORDERBY PARTITIONBY MATCHBY WINDOW RANK ROWNUMBER