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 如何能够转到上一年,而不需要使用 REMOVEFILTERS 或 ALL 从日期表中删除过滤器?
根据 SQLBI:https://www.sqlbi.com/articles/introducing-window-functions-in-dax/
因为我们没有指定源表,所以自动OFFSET 使用 ALLSELECTED 对所有指定的列生成表 在 ORDERBY 中。
依靠自动表格生成可以产生更简单的代码 – 冒着找不到所需行并获得 结果不准确。表达计算的正确方法是 使用 ALL ( ‘日期’[年份])。使用 ALL 忽略年份上的先前过滤器 产生正确的结果: