Partager via


WINDOW

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

Retourne plusieurs lignes qui sont positionnées dans l’intervalle donné.

Syntaxe

WINDOW ( from[, from_type], to[, to_type][, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Paramètres

Terme Définition
de Indique l’emplacement de démarrage de la fenêtre. Peut être toute expression DAX qui retourne une valeur scalaire.
Le comportement dépend du paramètre <from_type> :
- Si <from_type> est REL, il s’agit du nombre de lignes duquel revenir en arrière (valeur négative) ou avancer (valeur positive) à partir de la ligne active pour obtenir la première ligne dans la fenêtre.
- Si <from_type> a la valeur ABS et que la valeur de <from> est positive, il s’agit de la position du début de la fenêtre à partir du début de la partition. L’indexation commence à 1. Par exemple, 1 signifie que la fenêtre démarre au début de la partition. Si la valeur de <from> est négative, il s’agit de la position du début de la fenêtre à partir de la fin de la partition. -1 signifie la dernière ligne de la partition.
from_type Modifie le comportement du paramètre <from>. Les valeurs possibles sont ABS (absolu) et REL (relatif). La valeur par défaut est REL.
to Identique à <from>, mais indique la fin de la fenêtre. La dernière ligne est incluse dans la fenêtre.
to_type Identique à <from_type>, mais modifie le comportement de <à>.
relation (Facultatif) Expression de table à partir de laquelle les lignes de sortie sont retournées.
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

Toutes les lignes de la fenêtre.

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. Si <from_type> et <to_type> ont la valeur ABS, ce qui suit s’applique uniquement aux colonnes <partitionBy> :

  • S’il existe exactement une colonne externe correspondante, sa valeur est utilisée.
  • S’il n’existe aucune colonne externe correspondante :
    • WINDOW 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 WINDOW, WINDOW est évalué, et les lignes correspondantes sont retournées.
    • La sortie finale de WINDOW 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, WINDOW 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> :

  • WINDOW 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, WINDOW 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 fenêtre entière se trouve à l’extérieur de la partition, ou le début de la fenêtre se trouve après sa fin.

Si WINDOW 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.

Si le début de la fenêtre se trouve avant la première ligne, la valeur est définie sur la première ligne. De même, si la fin de la fenêtre se trouve après la dernière ligne de la partition, elle est définie sur la dernière ligne.

<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 : mesure

La mesure suivante :

3-day Average Price = 
AVERAGEX(
    WINDOW(
        -2,REL,0,REL,
        SUMMARIZE(ALLSELECTED('Sales'), 'Date'[Date], 'Product'[Product]),
        ORDERBY('Date'[Date]),
        KEEP,
        PARTITIONBY('Product'[Product])
    ), 
    CALCULATE(AVERAGE(Sales[Unit Price]))
)

Retourne la moyenne sur 3 jours des prix unitaires pour chaque produit. Notez que la fenêtre de 3 jours se compose de trois jours pendant lesquels le produit a des ventes, pas nécessairement trois jours calendaires consécutifs.

Exemple 2 : mesure

La mesure suivante :

RunningSum =
SUMX (
    WINDOW (
        1, ABS, 0, REL,
        ALLSELECTED (
            'Date'[Fiscal Year],
            'Date'[Month Number Of Year]
        ),
        PARTITIONBY ( 'Date'[Fiscal Year] )
    ),
    [Total Sales]
)

Retourne la somme actuelle pour le Total des ventes sur [nombre du mois de l’année], en redémarrant pour chaque exercice financier :

Year Nombre du mois de l’année Sales Amount RunningSum
EF2018 1 1 327 675 $ 1 327 675 $
EF2018 2 3 936 463 $ 5 264 138 $
EF2018 3 700 873 $ 5 965 011 $
EF2018 4 1 519 275 $ 7 484 286 $
EF2018 5 2 960 378 $ 10 444 664 $
EF2018 6 1 487 671 $ 11 932 336 $
EF2018 7 1 423 357 $ 13 355 693 $
EF2018 8 2 057 902 $ 15 413 595 $
EF2018 9 2 523 948 $ 17 937 543 $
EF2018 10 561 681 $ 18 499 224 $
EF2018 11 4 764 920 $ 23 264 145 $
EF2018 12 596 747 $ 23 860 891 $
EF2019 1 1 847 692 $ 1 847 692 $
EF2019 2 2 829 362 $ 4 677 054 $
EF2019 3 2 092 434 $ 6 769 488 $
EF2019 4 2 405 971 $ 9 175 459 $
EF2019 5 3 459 444 $ 12 634 903 $
EF2019 6 2 850 649 $ 15 485 552 $
EF2019 7 2 939 691 $ 18 425 243 $
EF2019 8 3 964 801 $ 22 390 045 $
EF2019 9 3 287 606 $ 25 677 650 $
EF2019 10 2 157 287 $ 27 834 938 $
EF2019 11 3 611 092 $ 31 446 030 $
EF2019 12 2 624 078 $ 34 070 109 $
EF2020 1 3 235 187 $ 3 235 187 $
EF2020 2 4 070 046 $ 7 305 233 $
EF2020 3 4 429 833 $ 11 735 066 $
EF2020 4 4 002 614 $ 15 737 680 $
EF2020 5 5 265 797 $ 21 003 477 $
EF2020 6 3 465 241 $ 24 468 717 $
EF2020 7 3 513 064 $ 27 981 781 $
EF2020 8 5 247 165 $ 33 228 947 $
EF2020 9 5 104 088 $ 38 333 035 $
EF2020 10 3 542 150 $ 41 875 184 $
EF2020 11 5 151 897 $ 47 027 081 $
EF2020 12 4 851 194 $ 51 878 275 $

Exemple 3 : calcul de visuel

La requête DAX de calcul de visuel suivante :

TotalSalesRunningSumByYear = SUMX(WINDOW(0, ABS, 0, REL, ROWS, HIGHESTPARENT), [SalesAmount])

Retourne le total cumulé des ventes par mois, calculé au fil de chaque année. Les valeurs 1 et -2 pourraient être utilisées au lieu de HIGHESTPARENT, avec les mêmes résultats.

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

Calcul visuel DAX

Exemple 4 : calcul de visuel

La requête DAX de calcul de visuel suivante :

TotalSalesRunningSumByQuarter = SUMX(WINDOW(0, ABS, 0, REL, , -1), [SalesAmount])

Retourne le total cumulé des ventes par mois, calculé au fil de chaque trimestre.

INDEX
MOVINGAVERAGE
DÉCALAGE
ORDERBY
PARTITIONBY
RANGE
RANK
ROWNUMBERRUNNINGSUM