DAX 计算年初至今 - 年初至今(年份变化)

DAX Calculate Year To Date - Year to Previous Month (year change)

试图弄清楚如何计算与 YTD 相等但直到年份发生变化的上个月为止的金额。

例如:

Date    | Value
2018-10 | 100 
2018-11 | 100 
2018-12 | 100 
2019-01 | 100
2019-02 | 100
2019-03 | 100

预期结果:

选择2019-03时

YTD = 300(从 2019-01 到 2019-03 累计)

上月累计=200(2019-01至2019-02累计)

选择2019-01时

年初至今 = 100

上月累计=300(2018-10至2018-12累计)

我试过:

Value_Accum_PreviousMonth:=TOTALYTD([Value];Calendar[Date]) - [Value]

但是随着年份的变化,就不行了

有什么想法吗?

免责声明 - 我使用 Power BI 创建了这个解决方案。该公式应该转移到 Excel/PowerPivot,但它可能需要一些小的调整。


虽然 DAX 的时间智能功能非常有用,但我似乎更喜欢手动计算 YTD、上一年等的方法。考虑到这一点,这就是我解决问题的方法。

首先,我会做一个度量,它是您的“值”列的简单总和。有了这个措施就很好了;不是绝对必要的。

Total Value = SUM(Data[Value])

接下来,为了根据前一个月手动计算 YTD,我们需要知道两件事,1) 目标月份(即前一个月)是几月和 2) 该月是哪一年。

如果您打算在其他任何地方使用这些值,我会把它们放在自己的度量中并在这里使用它们。如果这是唯一会用到它们的地方,我喜欢用变量来计算这些类型的值。

我们需要的第一个值是选中的(或未选中时的最大日期)。

VAR SelectedDate = MAX(Data[Date])

有了那个日期,我们就可以计算出 TargetYear 和 TargetMonth。它们都是简单的 IF 语句来捕获 January/December 交叉。

VAR TargetYear = IF(MONTH(SelectedDate) = 1, YEAR(SelectedDate) - 1, YEAR(SelectedDate))
VAR TargetMonth = IF(MONTH(SelectedDate) = 1, 12, MONTH(SelectedDate) - 1)

有了我们需要的所有值,我们编写一个 CALCULATE 语句过滤数据到 TargetYear 和月份小于或等于 TargetMonth。

CALCULATE([Total Value], FILTER(ALL(Data), YEAR([Date]) = TargetYear && MONTH([Date]) <= TargetMonth))

把它们放在一起看起来像这样。

Prior Month YTD = 
VAR SelectedDate = MAX(Data[Date])
VAR TargetYear = IF(MONTH(SelectedDate) = 1, YEAR(SelectedDate) - 1, YEAR(SelectedDate))
VAR TargetMonth = IF(MONTH(SelectedDate) = 1, 12, MONTH(SelectedDate) - 1)

RETURN
    CALCULATE([Total Value], FILTER(ALL(Data), YEAR([Date]) = TargetYear && MONTH([Date]) <= TargetMonth))