【问题标题】:SSAS 2012 DAX SamePeriodLastYear() with Date DimensionSSAS 2012 DAX SamePeriodLastYear() 与日期维度
【发布时间】:2015-07-23 13:49:22
【问题描述】:

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

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. 首先将其他维度添加到枢轴,以查看公式是否完全正确计算。

我是 DAX 新手,不知道如何解决此问题。任何帮助表示赞赏!

【问题讨论】:

  • 听起来您的 FullDate 列中有一些其他值,例如“1”、“2”、“TBD”或“未知”。 SAMEPERIODLASTYEAR 正在尝试解析与 DATE 类型匹配的值。听起来您的 DimDate 表中的值不是它可以解析的格式。
  • 所以,我将日期更改为使用 2050-12-31 而不是 9999-12-31 或 1900-01-01,当我使用“在 Excel 中分析”选项时,事情开始起作用了。这是在我们的开发服务器上运行的,它再次运行。但是当我部署到 dev 时,我仍然遇到同样的错误。我认为现在有不同的原因,所以我可能会提出另一个问题。
  • 是的,我认为 9999-12-31 和 1900-01-01 超出范围

标签: sql-server ssas dax


【解决方案1】:

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

【讨论】:

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