我试图获取一个计算列(不是度量值),该列基于该表当前行中的值(相对于当前行中的日期滞后1个月)获得该列的总和。我的表中的日期仅是每个月的第一天。我在问有关DAX的问题;但是,如果有这样的解决方案,我也可以在Power Query中的M语言中实现(实际上可能会更喜欢)。
我已经可以使用这种方法来衡量工作。
CALCULATE(SUM(AMT), DATEADD(DATECOLUMN, -1, MONTH))
但是我想成为一个新专栏。
假设表看起来像这样。
A B C D AMT
6 BAC456 5/1/2019 TEST 25
2 EPS123 4/1/2019 TEST 45
2 EPS123 3/1/2019 TEST 65
6 BAC456 4/1/2019 TEST 43
6 BAC456 4/1/2019 TEST 88
7 GRE123 4/1/2019 TEST 90
9 BAC456 4/1/2019 TEST 43
我想在此表中还有第一列:
A B C D AMT NEWCOL
6 BAC456 5/1/2019 TEST 25 131
第二行是:
A B C D AMT NEWCOL
2 EPS123 4/1/2019 TEST 45 65
等等。
在月份列是整个表中第一个月的情况下,NEWCOL将为0
答案 0 :(得分:1)
要在计算所得的列中轻松实现此目的,在编写最终DAX之前需要类似以下内容。
Month Num = MONTH(MyTable[C])
Month Diff = DATEDIFF(MyTable[C],MAX(MyTable[C]),MONTH)
现在您已经定义了这些月份差异和月份编号,您可以编写这样的DAX-
Amount - New Column =
Var selectedValue_B = MyTable[B]
Var SelectedValue_MonthDiff = MyTable[Month Diff]
Var out1 = CALCULATE(SUM(MyTable[AMT]), FILTER(ALL(MyTable), MyTable[Month Diff] = SelectedValue_MonthDiff+1 && MyTable[B] = selectedValue_B)) + 0
return out1
这使我的桌子看起来像
我在公式中使用了Var(变量),以帮助您了解公式中正在发生的事情。
如果可以解决您的问题,请接受答案。
答案 1 :(得分:1)
要获取131
,我假设您需要在A
和B
两列上都匹配。
NewCol =
CALCULATE (
SUM ( Table1[AMT] ),
ALLEXCEPT ( Table1, Table1[A], Table1[B] ),
PREVIOUSMONTH ( Table1[C] )
)
这将对列AMT
进行求和,以保持列A
和B
的行上下文,并指定上个月作为C
的过滤器。请注意,对于没有上个月的行,这将返回空白。如果您希望使用0
,请在最后一个右括号后添加+ 0
。
如果PREVIOUSMONTH
不起作用,请尝试以下操作:
NewCol =
CALCULATE (
SUM ( Table1[AMT] ),
ALLEXCEPT ( Table1, Table1[A], Table1[B] ),
Table1[C] = EOMONTH ( EARLIER( Table1[C] ), -2 ) + 1
)
对于date = 5/1/2019
,EOMONTH ( date, -2 )
返回3/31/2019
。加一天即可获得4/1/2019
。