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))
试图弄清楚如何计算与 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))