OFFSET
Se aplica a:columna Calculadatabla calculadaMedidacálculo visual
Devuelve una sola fila que se coloca antes o después de la fila actual dentro de la misma tabla, mediante un desplazamiento determinado. Si la fila actual no se puede deducir a 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 antes (valor negativo) o después (valor positivo) de la fila actual desde la que 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 se debe especificar explícitamente.: todas las expresiones de orderBy y partitionBy deben ser nombres de columna completos y proceder de una sola tabla.
: el valor predeterminado es ALLSELECTED() de todas las columnas de orderBy y partitionBy . |
axis |
(Opcional) Eje de la forma visual. Solo está disponible en cálculos visuales y reemplaza relation . |
orderBy |
(Opcional) Cláusula ORDERBY() que contiene las expresiones que definen cómo se ordena cada partición.
Si se omite: - relation se debe especificar explícitamente.
: el valor predeterminado es ordenar por cada columna de relation que aún no se ha especificado en partitionBy . |
blanks |
(Opcional) Enumeración que define cómo controlar valores en blanco al ordenar el relation o axis .
Los valores admitidos son:
Nota, cuando se especifica el parámetro blanks y los espacios en blanco de la función ORDERBY() en expresiones individuales, blanks en la expresión orderBy individual tienen prioridad para la expresión orderBy pertinente y las expresiones orderBy sin blanks especificar respetarán el parámetro blanks en la función primaria. |
partitionBy |
(Opcional) Cláusula 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. Indica si el cálculo se restablece y en qué nivel de la jerarquía de columnas de la forma visual. Los valores aceptados son: una referencia de campo a una columna de la forma visual actual, NONE (valor predeterminado), 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 del valor más alto e independiente del grano. HIGHESTPARENT equivale a 1.
: si es negativo, el entero identifica la columna a partir del más bajo, en relación con el grano actual. LOWESTPARENT equivale a -1. |
Valor devuelto
Una o varias filas de relation
.
Observaciones
Excepto para las columnas agregadas por DAX funciones de tabla, cada columna de relation
, 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 operar, con el siguiente comportamiento:
- Si hay exactamente una columna externa correspondiente, se usa su valor.
- Si no hay ninguna columna externa correspondiente, haga lo siguiente:
- OFFSET determinará primero todas las columnas que no tienen ninguna columna externa correspondiente.
- Para cada combinación de valores existentes para estas columnas en OFFSETcontexto primario, se evalúa OFFSET y se devuelve una fila.
- OFFSETla salida final 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 DAX funciones de tabla, se devuelve un error.
Si matchBy
está presente, OFFSET intentará usar matchBy
y partitionBy
columnas 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
, a continuación:
- OFFSET intentará encontrar el menor número de columnas adicionales necesarias para identificar de forma única cada fila.
- Si se pueden encontrar estas columnas, OFFSET anexará automáticamente estas nuevas columnas a
orderBy
y cada partición se ordena mediante 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 de
delta
provoca un desplazamiento a una fila que no existe dentro de la partición.
Si OFFSET se usa dentro de una columna calculada definida en la misma tabla que relation
y se omite orderBy
, se devuelve un error.
reset
solo se pueden usar en cálculos visuales y no se pueden usar en combinación con orderBy
o partitionBy
. Si reset
está presente, se puede especificar axis
pero no se puede relation
.
Ejemplo 1: columna calculada
La siguiente consulta DAX:
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 siguiente consulta DAX:
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]
)
Usa 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 siguiente consulta DAX:
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, la cantidad de la venta anterior, del mismo producto, en orden descendente de la cantidad de ventas, con la venta actual identificada por su SalesOrderNumber y SalesOrderLineNumber. Sin MATCHBY, la consulta devolvería un error, ya que no hay ninguna columna clave en la tabla FactInternetSales.
Ejemplo 4: cálculo visual
El siguiente cálculo visual DAX consulta:
SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))
Devuelve la diferencia en las ventas totales entre cada mes y la anterior dentro del mismo año.
En la captura de pantalla siguiente se muestra la matriz visual y la expresión de cálculo visual:
de cálculo visual