活动
抵消
返回一行,该行位于同一表中 当前行 之前或之后,按给定的偏移量。 如果无法将当前行推断为单个行,可能会返回多个行。
OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )
术语 | 定义 |
---|---|
delta |
要从中获取数据的当前行之前(负值)或(正值)之前的行数。 它可以是返回标量值的任何 DAX 表达式。 |
relation |
(可选)从中返回输出行的表表达式。
如果指定, partitionBy 中的所有列都必须来自它或相关表。
如果省略:必须显式指定 - orderBy 。- 所有 orderBy 和 partitionBy 表达式都必须是完全限定的列名,并且来自单个表。
- 默认为 orderBy 和 partitionBy 中的所有列的 ALLSELECTED()。 |
axis |
(可选)视觉形状中的轴。 仅在视觉计算中可用,并替换 relation 。 |
orderBy |
(可选)一个 ORDERBY() 子句,其中包含定义如何对每个分区进行排序的表达式。
如果省略:必须显式指定 - relation 。
- 默认为 relation 中尚未在 partitionBy 中指定的每一列排序。 |
blanks |
(可选)一个枚举,用于定义在排序时如何处理空值。
此参数保留供将来使用。 目前,唯一支持的值是 DEFAULT,其中数值的行为是空值在零和负值之间排序。 字符串的行为是空值在所有字符串(包括空字符串)之前排序。 |
partitionBy |
(可选)PARTITIONBY() 子句,其中包含定义如何分区 relation 的列。
如果省略,则 relation 被视为单个分区。 |
matchBy |
(可选)MATCHBY() 子句,其中包含定义如何匹配数据和标识当前行的列。 |
reset |
(可选)仅在视觉计算中可用。 指示计算是否重置,以及视觉形状的列层次结构的哪个级别。 接受的值为:NONE、LOWESTPARENT、HIGHESTPARENT 或整数。 此行为取决于整数符号: - 如果为零或省略,则计算不会重置。 等效于 NONE。 - 如果为正值,则整数标识从最高、与粒度无关的列。 HIGHESTPARENT 等效于 1。 - 如果为负数,则整数标识从最低到当前粒度的列。 LOWESTPARENT 等效于 -1。 |
来自 relation
的一行或多行。
除了 DAX 表函数添加的列、relation
中的每个列、matchBy
不存在时,或者 matchBy
和 partitionBy
中的每个列(如果存在 matchBy
),必须具有相应的外部值,以帮助定义要对其操作的当前行,并具有以下行为:
- 如果正好有一个对应的外部列,则使用其值。
- 如果没有相应的外部列,则:
- OFFSET 将首先确定没有相应外部列的所有列。
- 对于 OFFSET 父上下文中这些列的现有值的每个组合,将计算 OFFSET 并返回一行。
- OFFSET 的最终输出是这些行的联合。
- 如果有多个相应的外部列,则返回错误。
如果 DAX 表函数添加了所有 relation
列,则返回错误。
如果存在 matchBy
,OFFSET 将尝试使用 matchBy
和 partitionBy
列来标识行。
如果 matchBy
不存在,并且 orderBy
中指定的列和 partitionBy
无法唯一标识 relation
中的每一行,则:
- OFFSET 将尝试查找唯一标识每行所需的最少额外列数。
- 如果找到此类列,OFFSET 将自动将这些新列追加到
orderBy
,并且每个分区都使用此新的 OrderBy 列集进行排序。 - 如果找不到此类列,则返回错误。
如果:
- OrderBy 或 PartitionBy 列的相应外部值不存在于
relation
中。 -
delta
值会导致转移到分区中不存在的行。
如果在与 relation
相同的表上定义的计算列中使用 OFFSET,并且省略 orderBy
,则返回错误。
reset
只能用于视觉计算,不能与 orderBy
或 partitionBy
结合使用。 如果存在 reset
,则可以指定 axis
,但无法指定 relation
。
以下 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]
)
)
返回一个表,该表汇总了每个产品类别和日历年的总销售额,以及上一年该类别的总销售额。
以下 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]
)
在度量值中使用 OFFSET()返回一个表,该表汇总了每个日历年的总销售额和上一年的总销售额。
以下 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]
)
)
返回 FactInternetSales 表,其中添加了一列,该列指示每个销售的同一产品的上一次销售金额(按销售金额的降序排列),当前销售由 SalesOrderNumber 和 SalesOrderLineNumber 标识。 如果没有 MATCHBY,查询将返回错误,因为 FactInternetSales 表中没有键列。
以下视觉计算 DAX 查询:
SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))
返回同一年内每个月和上一年的总销售额差异。
下面的屏幕截图显示了视觉矩阵和视觉计算表达式: