【问题标题】:SSAS DAX time intelligence previous year and calculation gives wrong value上一年的 SSAS DAX 时间智能和计算给出了错误的值
【发布时间】:2015-03-31 14:04:32
【问题描述】:

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

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

不幸的是,在比较年份时,它以某种方式显示出微小的(十进制)差异。 当我们切片到几个月时,差异会更大。

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

非常感谢任何帮助!

【问题讨论】:

    标签: sql ssas tabular dax


    【解决方案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 月的月份序列为 1,2011 年 1 月的月份序列为 13。2010 年第一季度的季度序列为 1,2012 年第一季度的季度序列为9.

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多