Power BI(DAX)中具有当前行值和先前日期的计算列

时间:2019-07-01 14:08:19

标签: powerbi dax calculated-columns

我试图获取一个计算列(不是度量值),该列基于该表当前行中的值(相对于当前行中的日期滞后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

2 个答案:

答案 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

这使我的桌子看起来像

enter image description here

我在公式中使用了Var(变量),以帮助您了解公式中正在发生的事情。

如果可以解决您的问题,请接受答案。

答案 1 :(得分:1)

要获取131,我假设您需要在AB两列上都匹配。

NewCol =
CALCULATE (
    SUM ( Table1[AMT] ),
    ALLEXCEPT ( Table1, Table1[A], Table1[B] ),
    PREVIOUSMONTH ( Table1[C] )
)

这将对列AMT进行求和,以保持列AB的行上下文,并指定上个月作为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/2019EOMONTH ( date, -2 )返回3/31/2019。加一天即可获得4/1/2019