当我想获得前一个日历年的销售额时,我使用如下公式:
Cal Prior Yr Sales:=if(HASONEVALUE('Sale Date'[Calendar Year]),
Calculate([Total Sales],
PREVIOUSYEAR('Sale Date'[Date])),BLANK())
HASONEVALUE 只是确保只选择了一年,因此它将知道要检索的正确上一年。
您可以进行一系列计算,让您使用一个计算来确定您所处的日期层次结构的级别(假设您的日期表中有可用的字段)。这是我过去使用过的东西,其财政日历与普通日历不同。
一、基础计算:
Sales Same Week Prior Year:=
CALCULATE([Total Sales],Filter(All('Sale Date'),
'Sale Date'[Week Key] = max('Sale Date'[Same Week Last Year])))
Sales Same Month Prior Year:=CALCULATE([Total Sales], Filter(All('Sale Date'),
'Sale Date'[Month Seq] = max('Sale Date'[Month Seq])-12))
Sales Same Quarter Prior Year:=CALCULATE([Total Sales], Filter(All('Sale Date'),
'Sale Date'[Quarter Seq] = max('Sale Date'[Quarter Seq])-4))
Sales Prior Year:=CALCULATE([Total Sales], Filter(All('Sale Date'),
'Sale Date'[Fiscal Year] = max('Sale Date'[Fiscal Year])-1))
您可以隐藏所有这些计算,然后创建最后一个计算并使其可见:
Sales Same Period Last Year:=
if(HASONEVALUE('Sale Date'[Week Key]), [Sales Same Week Prior Year],
if(HASONEVALUE('Sale Date'[Month Key]),[Sales Same Month Prior Year],
if(HASONEVALUE('Sale Date'[Quarter Key]),[Sales Same Quarter Prior Year],
if(HASONEVALUE('Sale Date'[Fiscal Year]), [Sales Prior Year], BLANK()))))
您可能需要在日期表中添加几个计算字段才能使其正常工作。我有以下字段:[去年同一周]、[月序列]、[季度序列]。去年同一周是一个整数字段,即 yyyyww。 Month Seq 和 Quarter Seq 只是按时间顺序自动递增的整数,不会重复。
我去年同一周的公式是
=if('Sale Date'[Week Nbr] = 53, (('Sale Date'[Fiscal Year]-1) * 100) + ([Week Nbr]-1),
(('Sale Date'[Fiscal Year]-1) * 100) + ([Week Nbr]))
我在我的 SQL 视图中做了序列号,这是日期日期的来源。例如,如果我的日期表从 2010 年 1 月 1 日开始,则 2010 年 1 月的月份序列为 1,2011 年 1 月的月份序列为 13。2010 年第一季度的季度序列为 1,2012 年第一季度的季度序列为9.
http://www.daxpatterns.com/time-patterns/ 是本主题的好读物。