我有一个数据模型,其中包含一个名为Transactions(下)的表,以及一个日期维度的TranDate。
我有一个措施来计算在数据透视表中可见的第一个日期的期初余额。
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中不支持变量。如果我用DAX表达式替换MinDate变量,则度量将返回空白,因为ALLSELECTED会恢复上下文中的上下文FILTER()函数而不是CALCULATE()函数中的上下文(即MinDate是1-Jan而不是1-Feb)。
是否存在可在Excel 2013 / SSAS 2014中使用的等效DAX公式(即不使用变量)?
答案 0 :(得分:3)
经过大量的试验和错误,这是我定义的措施:
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(),以便在ALLSELECTED()之外的上下文中保留原始过滤器上下文(即数据透视表选择)。
如果要将TranDate表用作过滤器,可以按如下方式定义:
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]
)