DAX计算年初至今-上个月的年份(年份更改)

时间:2019-04-05 19:33:54

标签: excel dax powerpivot

试图弄清楚如何计算与年初至今的等效值,但是当年份改变时直到上个月。

例如:

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

预期结果:

当选择2019-03时

年初至今= 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]

但是随着年份的变化,它不起作用

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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


虽然DAX的时间智能功能非常有用,但我似乎倾向于手动计算YTD,上一年等方式。因此,这就是我要解决的问题。

首先,我要做一个度量,它只是您的Value列的总和。采取这种措施在以后很不错。并非绝对必要。

Total Value = SUM(Data[Value])

接下来,要用于基于上个月手动计算YTD,我们需要知道两件事:1)什么是目标月份(即,上个月)和2)什么是该月的年份。

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

我们需要的第一个值是选定的值(如果没有选择,则为最大日期)。

VAR SelectedDate = MAX(Data[Date])

在该日期之后,我们可以计算TargetYear和TargetMonth。它们都是简单的IF语句,可以捕获一月/十二月的交叉。

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))

Result