OFFSET
Se aplica a:Columna calculadaTabla calculadaMedidaCálculo visual
Devuelve una sola fila que se coloca antes o después de la fila actual en la misma tabla, con un desplazamiento determinado. Si la fila actual no se puede deducir como una sola fila, se pueden devolver varias filas.
Sintaxis
OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
Parámetros
Término | Definición |
---|---|
delta | Número de filas delante (valor negativo) o después (valor positivo) de la fila actual desde la que se van a obtener los datos. Puede ser cualquier expresión DAX que devuelva un valor escalar. |
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
Una o varias filas de <relation>.
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, con el siguiente comportamiento:
- Si hay exactamente una columna externa correspondiente, se utiliza su valor.
- Si no hay ninguna columna externa correspondiente:
- OFFSET 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 OFFSET, se evalúa OFFSET y se devuelve una fila.
- La salida final de OFFSET 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, OFFSET 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>:
- OFFSET intenta buscar el menor número de columnas adicionales necesarias para identificar de forma única cada fila.
- Si se encuentran estas columnas, OFFSET 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 OrderBy o PartitionBy no existe en <relation>.
- El valor <delta> provoca un desplazamiento a una fila que no existe en la partición.
Si se utiliza OFFSET en una columna calculada definida en la misma tabla que <relation> y se omite <orderBy>, se devuelve un error.
<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: columna calculada
La consulta DAX siguiente:
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]
)
)
Devuelve una tabla que resume las ventas totales de cada categoría de producto y año natural, así como las ventas totales de esa categoría en el año anterior.
Ejemplo 2: medida
La consulta DAX siguiente:
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]
)
Utiliza OFFSET() en una medida para devolver una tabla que resume las ventas totales de cada año natural y las ventas totales del año anterior.
Ejemplo 3: columna calculada
La consulta DAX siguiente:
EVALUATE
ADDCOLUMNS (
FactInternetSales,
"Previous Sales Amount",
SELECTCOLUMNS (
OFFSET (
-1,
FactInternetSales,
ORDERBY ( FactInternetSales[SalesAmount], DESC ),
PARTITIONBY ( FactInternetSales[ProductKey] ),
MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
),
FactInternetSales[SalesAmount]
)
)
Devuelve la tabla FactInternetSales con la adición de una columna, que indica, para cada venta, el importe de la venta anterior, del mismo producto, en orden descendente según el importe de ventas, con la venta actual identificada mediante su SalesOrderNumber y SalesOrderLineNumber. Sin MATCHBY, la consulta devolvería un error porque no hay columnas de clave en la tabla FactInternetSales.
Ejemplo 4: cálculo visual
La siguiente consulta DAX de cálculo visual:
SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))
Devuelve la diferencia de ventas totales entre cada mes y el anterior dentro del mismo año.
En la siguiente captura de pantalla se muestra la matriz visual y la expresión de cálculo visual: