试图弄清楚如何计算与年初至今的等效值,但是当年份改变时直到上个月。
例如:
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]
但是随着年份的变化,它不起作用
有什么想法吗?
答案 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))