-->

SSAS DAX时间智能上年计算给出错误值(SSAS DAX time intelligence p

2019-10-22 11:13发布

我们要展示当前时期销售额与上期销售。 要显示前一段时间我们使用的日期dimenion表和以下计算:

CALCULATE(SalesValueGross; DATEADD(日期[日期] -1; YEAR))

不幸的是不知何故,比较年的时候显示未成年人(十进制)的差异。 所不同的获取的更大当我们切片个月。

我们有另一个问题是,这种计算似乎并没有进行比较时,(例如)周1的工作 - 2015年1周 - 2014

任何帮助是极大的赞赏!

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

您可能需要几个计算字段添加到您的日期表,使其工作。 我有一个字段:上年同周],[月SEQ],[季度序列。 去年同一周是一个整数字段是yyyyww。 一个月序列和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视图,这是日日源。 举个例子,如果我的日期表开始于1/1/2010,为2010年1月的月以次为1和2011年1月的月以次为13. 2010年第一季度季度序列是1和2012年第一季度的季度序列是9。

http://www.daxpatterns.com/time-patterns/是这个主题很好看。



文章来源: SSAS DAX time intelligence previous year and calculation gives wrong value