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

Calculated Column with Current Row Values and Previous Dates in Power BI (DAX)

我正在尝试获取一个计算列(不是度量值),它根据 table 的当前行中的值获取列的总和,该列的日期滞后 1 个月当前行上的日期。我的 table 的日期仅是每个月的第一天。该月没有其他日期。我在问关于 DAX 的问题;但是,如果也有这样的解决方案,我可以在 Power Query 中使用 M 语言实现(实际上可能更喜欢)。

我已经能够使用这样的方法来衡量工作了..

CALCULATE(SUM(AMT), DATEADD(DATECOLUMN, -1, MONTH))

但我想成为一个新专栏。

假设 table 看起来像这样..

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

我想在此 table 中添加另一列,其中第一行为:

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

等..

如果月份列是整个 table 中的第一个月,NEWCOL 将为 0

为了在计算列中轻松实现这一点,在编写最终的 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

这让我的 table 看起来像,

我在公式中使用了 Var(Variables) 来帮助您理解公式中发生的事情。

如果能解决您的问题,请采纳。

要获得 131,我假设您需要匹配 AB.

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

这对列 AMT 求和,保留列 AB 的行上下文,并将前一个月指定为 C 上的过滤器。请注意,对于没有上个月的行,此 returns 为空白。如果您更喜欢 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 )returns3/31/2019。加一天得到4/1/2019.