Compartir a través de


WINDOW

Se aplica a:Columna calculadaTabla calculadaMedidaCálculo visual

Devuelve varias filas que se colocan dentro del intervalo especificado.

Sintaxis

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

Parámetros

Término Definición
desde Indica dónde comienza el período. Puede ser cualquier expresión DAX que devuelva un valor escalar.
El comportamiento depende del parámetro <from_type>:
- Si <from_type> es REL, es el número de filas que se retrocede (valor negativo) o se avanza (valor positivo) desde la fila actual para obtener la primera fila del período.
- Si <from_type> es ABS y <from> es positivo, es la posición donde comienza el período respecto al principio de la partición. La indexación es de base 1. Por ejemplo, 1 significa que el período comienza al principio de la partición. Si <from> es negativo, es la posición donde comienza el período respecto al final de la partición. -1 significa la última fila de la partición.
from_type Modifica el comportamiento del parámetro <from>. Los valores posibles son ABS (absoluto) y REL (relativo). El valor predeterminado es REL.
to Es igual que <from>, pero indica el final del período. La última fila se incluye en el período.
to_type Es igual que <from_type>, pero modifica el comportamiento de <to>.
relation (Opcional) Expresión de tabla desde la que se devuelve la fila de salida.
Si se especifica, todas las columnas de <partitionBy> deben proceder de ella o de una tabla relacionada.
Si se omite:
- <orderBy> debe especificarse explícitamente.
- Todas las expresiones de <orderBy> y <partitionBy> deben tener el nombre completo de la columna y proceder de una sola tabla.
- Toma el valor predeterminado ALLSELECTED() de todas las columnas de <orderBy> y <partitionBy>.
ejes (Opcional) Un eje en la forma visual. Solo está disponible en cálculos visuales y reemplaza la <relación>.
orderBy (Opcional) Cláusula ORDERBY() que contiene las expresiones que definen cómo se ordena cada partición.
Si se omite:
- <relation> debe especificarse explícitamente.
- De forma predeterminada, ordena por cada columna de <relation> que aún no se haya especificado en <partitionBy>.
espacios en blanco (Opcional) Enumeración que define cómo controlar los valores en blanco en la ordenación.
Este parámetro se reserva para uso futuro.
Actualmente, el único valor admitido es DEFAULT, donde el comportamiento de los valores numéricos es que los valores en blanco se ordenan entre cero y los valores negativos. El comportamiento de las cadenas es que los valores en blanco se ordenan delante de todas las cadenas, incluidas las cadenas vacías.
partitionBy (Opcional) Cláusula PARTITIONBY() que contiene las columnas que definen cómo se particiona <relation>. Si se omite, <relation> se trata como una sola partición.
matchBy (Opcional) Una cláusula MATCHBY() que contiene las columnas que definen cómo hacer coincidir los datos e identificar la fila actual.
reset (Opcional) Solo está disponible en cálculos visuales. Indique si el cálculo se restablece y en qué nivel de la jerarquía de columnas de la forma visual. Los valores aceptados son: NONE, LOWESTPARENT, HIGHESTPARENT o un entero. El comportamiento depende del signo entero:
: si se omite cero, el cálculo no se restablece. Equivalente a NONE.
: si es positivo, el entero identifica la columna a partir de la más alta, independiente del intervalo de agregación. HIGHESTPARENT es equivalente a 1.
: si es negativo, el entero identifica la columna a partir del más bajo, en relación con el intervalo de agregación actual. LOWESTPARENT es equivalente a -1.

Valor devuelto

Todas las filas del período.

Observaciones

Excepto las columnas agregadas por las funciones de tabla DAX, cada columna de <relación>, cuando <matchBy> no está presente o cada columna de <matchBy> y <partitionBy>, cuando <matchBy> está presente, debe tener un valor externo correspondiente para ayudar a definir la fila actual en la que se va a operar. Si <from_type> y <to_type> tienen el valor ABS, lo siguiente solo se aplica a las columnas de <partitionBy>:

  • Si hay exactamente una columna externa correspondiente, se utiliza su valor.
  • Si no hay ninguna columna externa correspondiente:
    • WINDOW determina primero todas las columnas que no tienen ninguna columna externa correspondiente.
    • Para cada combinación de valores de estas columnas en el contexto primario de WINDOW, se evalúa WINDOW y se devuelven las filas correspondientes.
    • La salida final de WINDOW es una unión de estas filas.
  • Si hay más de una columna externa correspondiente, se devuelve un error.

Si todas las columnas de <relation> se agregaron mediante funciones de tabla DAX, se devuelve un error.

Si <matchBy> está presente, WINDOW intentará usar las columnas <matchBy> y <partitionBy> para identificar la fila.
Si <matchBy> no está presente y las columnas especificadas en <orderBy> y <partitionBy> no pueden identificar de forma única todas las filas de <relation>:

  • WINDOW intenta buscar el menor número de columnas adicionales necesarias para identificar de forma única cada fila.
  • Si se encuentran estas columnas, WINDOW anexa automáticamente estas nuevas columnas a <orderBy> y cada partición se ordena usando este nuevo conjunto de columnas OrderBy.
  • Si no se encuentran estas columnas, se devuelve un error.

Se devuelve una tabla vacía si:

  • El valor externo correspondiente de una columna de <orderBy> o <partitionBy> no existe en <relation>.
  • Todo el período está fuera de la partición o el principio del período está después de su final.

Si se utiliza WINDOW en una columna calculada definida en la misma tabla que <relation> y se omite <orderBy>, se devuelve un error.

Si el principio del período está antes que la primera fila, se establece en la primera fila. Del mismo modo, si el final del período está después de la última fila de la partición, se establece en la última fila.

<reset> solo se puede usar en cálculos visuales y no se puede usar en combinación con <orderBy> o <partitionBy>. Si <reset> está presente, se puede especificar el <eje>, pero no se puede especificar la <relación>.

Ejemplo 1: medida

La medida siguiente:

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]))
)

Devuelve el promedio de 3 días de los precios unitarios de cada producto. Tenga en cuenta que el período de 3 días consta de tres días en los que el producto tiene ventas, no necesariamente tres días naturales consecutivos.

Ejemplo 2: medida

La medida siguiente:

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

Devuelve la suma en ejecución de Ventas totales por número de mes de año, reiniciando para cada año fiscal:

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

Ejemplo 3: cálculo visual

La siguiente consulta DAX de cálculo visual:

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

Devuelve las ventas totales acumuladas por mes, calculadas a lo largo de cada año. Los valores 1 y -2 se pueden usar en lugar de HIGHESTPARENT, con los mismos resultados.

En la siguiente captura de pantalla se muestra la matriz visual y la expresión de cálculo visual:

Cálculo del objeto visual DAX

Ejemplo 4: cálculo visual

La siguiente consulta DAX de cálculo visual:

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

Devuelve las ventas totales acumuladas por mes, calculadas a lo largo de cada trimestre.

INDEX
MOVINGAVERAGE
OFFSET
ORDERBY
PARTITIONBY
RANGE
RANK
ROWNUMBERRUNNINGSUM