具有日期维度的SSAS 2012 DAX SamePeriodLastYear()

时间:2015-05-12 15:18:16

标签: sql-server ssas dax

我有一个日期维度和一个事实表。我有两个措施:

WorkOrdersCount:=
  count(
    FactWorkOrderLifeCycle[Clientsid]
  )

WorkOrdersLastYearCount:=
  CALCULATE(
    count(FactWorkOrderLifeCycle[Clientsid]),
    SAMEPERIODLASTYEAR(DimDate[FullDate])
  )

WorkOrdersCount很简单,工作正常。我认为WorkOrdersLastYearCount也很简单,但我现在意识到我不理解SAMEPERIODLASTYEAR()。

我的日期维度有一个DateSID列,其中包含日期的整数表示形式YYYYMMDD。它有两个记录保存行,SID为-1和-2,用于未知和TBD日期。我只在此解决方案中使用-1行。数据存储在SQL Server表中,FullDate列是“日期”类型。实际值是1900-01-01。

我的事实,FactWorkOrderLifecycle,有一个名为InvoicedDateSID的字段,它可以有一个空值,我用-1替换。

在Visual Studio中或处理olap时没有引发任何错误,但在引用数据透视表中的列时,我收到以下错误:

  

错误 - 计算中止:计算中的计算错误   'FactWorkOrderLifeCycle'[WorkOrdersLastYearCount]:无效的数字   遇到了日期值的表示。

我尝试过的事情(并非一切都有意义):

  1. 将SID值更改为正整数
  2. 当我看到DAX日期可能从1900-03-01开始时,将dimdate中的日期值更改为9999-12-31而不是1900-01-01
  3. 首先向枢轴添加其他尺寸,以查看公式是否正确计算。
  4. 我是DAX菜鸟,我不知道如何解决这个问题。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

确保您的日历表确实使用了日期数据类型。 删除日期的任何时间部分。 确保您的日历表中没有空白和重复。 确保您使用的是数据透视表中日历表中的字段,而不是数据表中与日期相关的字段。