【发布时间】: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]:无效数字 遇到日期值的表示。
我尝试过的事情(不是所有的都有意义):
- 将 SID 值更改为正整数
- 当我看到 DAX 日期可能从 1900-03-01 开始时,将 dimdate 中的日期值更改为 9999-12-31 而不是 1900-01-01
- 首先将其他维度添加到枢轴,以查看公式是否完全正确计算。
我是 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