SSAS DAX时间智能去年和计算给出了错误的价值

时间:2015-03-31 14:04:32

标签: sql ssas tabular dax

我们希望显示当前期间的销售额与上一期间的销售额。 为了显示上一期间,我们使用了日期维度表并进行了以下计算:

CALCULATE(SalesValueGross; DATEADD(Date [Date]; -1; YEAR))

不幸的是,它在比较年份时显示出次要(小数)差异。 当我们切成几个月时,差异会变得更大。

我们遇到的另一个问题是,在比较(例如)第1周至2015年第1周至2014年时,此计算似乎不起作用。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

当我想获得之前的日历年销售额时,我使用如下公式:

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月的seq为1,2011年1月的seq为13. 2010年第1季度的seq为1,2012年第1季度的seq为9.

http://www.daxpatterns.com/time-patterns/是这个主题的好读物。