在 DAX 公式中恢复原始过滤器上下文
Restore original filter context in DAX formula
我有一个数据模型,其中 table 称为 Transactions(如下),TranDate 是日期维度。
我有一个度量来计算数据透视表中可见的第一个日期的期初余额 table。
Op Bal First Selected :=
VAR MinDate = CALCULATE (
MIN ( TranDates[Tran Date] ),
ALLSELECTED ( TranDates )
)
RETURN
CALCULATE (
SUM ( Transactions[Amount] ),
FILTER
(
ALL ( TranDates ),
TranDates[Tran Date] < MinDate
)
)
如果我取消选择 Jan-16,我会得到下面想要的结果:
但是,该度量仅适用于 Excel 2016 而不是 Excel 2013,因为 Excel 2013 不支持变量。如果我将 MinDate 变量替换为 DAX 表达式,则该度量将 return 空白,因为 ALLSELECTED 恢复 FILTER() 函数中的上下文而不是 CALCULATE() 函数中的上下文(即 MinDate 是 1-Jan 而不是 1-Feb)。
是否有适用于 Excel 2013 / SSAS 2014 的等效 DAX 公式(即不使用变量)?
经过大量试验和错误,这是我定义的度量:
Op Bal First Selected:=
MINX
(
ADDCOLUMNS (
ADDCOLUMNS
(
SUMMARIZE (
ALL(Transactions),
Transactions[Tran Date]
),
"MinDate",
CALCULATE (
MIN ( Transactions[Tran Date] ),
ALLSELECTED()
)
),
"Op Bal First Selected Calc",
CALCULATE (
SUM ( Transactions[Amount] ),
FILTER
(
ALL( Transactions ),
Transactions[Tran Date] < [MinDate]
)
)
),
[Op Bal First Selected Calc]
)
我在内部上下文中使用了 ALL(),以便原始筛选器上下文(即枢轴 table 选择)保留在 ALLSELECTED() 之外的上下文中。
如果你想使用TranDate table作为过滤器,你可以定义如下:
Op Bal First Selected:=
MINX
(
ADDCOLUMNS (
ADDCOLUMNS
(
SUMMARIZE (
ALLSELECTED(TranDates),
TranDates[Tran Date]
),
"MinDate",
CALCULATE (
MIN ( TranDates[Tran Date] )
)
),
"Op Bal First Selected Calc",
CALCULATE (
SUM ( Transactions[Amount] ),
FILTER
(
ALL( TranDates ),
TranDates[Tran Date] < [MinDate]
)
)
),
[Op Bal First Selected Calc]
)
我有一个数据模型,其中 table 称为 Transactions(如下),TranDate 是日期维度。
我有一个度量来计算数据透视表中可见的第一个日期的期初余额 table。
Op Bal First Selected :=
VAR MinDate = CALCULATE (
MIN ( TranDates[Tran Date] ),
ALLSELECTED ( TranDates )
)
RETURN
CALCULATE (
SUM ( Transactions[Amount] ),
FILTER
(
ALL ( TranDates ),
TranDates[Tran Date] < MinDate
)
)
如果我取消选择 Jan-16,我会得到下面想要的结果:
但是,该度量仅适用于 Excel 2016 而不是 Excel 2013,因为 Excel 2013 不支持变量。如果我将 MinDate 变量替换为 DAX 表达式,则该度量将 return 空白,因为 ALLSELECTED 恢复 FILTER() 函数中的上下文而不是 CALCULATE() 函数中的上下文(即 MinDate 是 1-Jan 而不是 1-Feb)。
是否有适用于 Excel 2013 / SSAS 2014 的等效 DAX 公式(即不使用变量)?
经过大量试验和错误,这是我定义的度量:
Op Bal First Selected:=
MINX
(
ADDCOLUMNS (
ADDCOLUMNS
(
SUMMARIZE (
ALL(Transactions),
Transactions[Tran Date]
),
"MinDate",
CALCULATE (
MIN ( Transactions[Tran Date] ),
ALLSELECTED()
)
),
"Op Bal First Selected Calc",
CALCULATE (
SUM ( Transactions[Amount] ),
FILTER
(
ALL( Transactions ),
Transactions[Tran Date] < [MinDate]
)
)
),
[Op Bal First Selected Calc]
)
我在内部上下文中使用了 ALL(),以便原始筛选器上下文(即枢轴 table 选择)保留在 ALLSELECTED() 之外的上下文中。
如果你想使用TranDate table作为过滤器,你可以定义如下:
Op Bal First Selected:=
MINX
(
ADDCOLUMNS (
ADDCOLUMNS
(
SUMMARIZE (
ALLSELECTED(TranDates),
TranDates[Tran Date]
),
"MinDate",
CALCULATE (
MIN ( TranDates[Tran Date] )
)
),
"Op Bal First Selected Calc",
CALCULATE (
SUM ( Transactions[Amount] ),
FILTER
(
ALL( TranDates ),
TranDates[Tran Date] < [MinDate]
)
)
),
[Op Bal First Selected Calc]
)