【问题标题】:SSAS: How to handle date dimension when date is nullSSAS:日期为空时如何处理日期维度
【发布时间】:2016-06-23 17:51:10
【问题描述】:

我正在尝试向我的 SSAS 多维数据集添加一个新列。该列是一个日期字段,并链接到我的 DimDate 表(一个日期维度)。该日期代表项目完成日期。

但是.... 并非所有项目都有项目完成日期,因为旧项目从未被分配此值。这是意料之中的。我们不想为了让 SSAS 发挥作用而在字段中添加虚假日期。

在处理多维数据集时,它会崩溃:

Errors in the OLAP storage engine: The attribute key cannot be found when 
processing: Table: 'dbo_FactMyTable', Column: 'MyDate_id', Value: '0'. 
The attribute is 'Date Id'.

我不能为整个项目禁用“缺失值”,因为在大多数情况下,这确实是一个错误。如何禁用 维度的缺失值?

或者有没有更好的方法来处理这样的缺失日期/值?

【问题讨论】:

    标签: ssas


    【解决方案1】:

    小修正 - 根据您的问题,您需要更改特殊 Measure Group 的处理错误处理,而不是 Dimension。您可以对链接到某个度量值组的所有维度执行此操作,但不能针对特定维度执行此操作。
    您可以使用 _Table: 'dbo_FactMyTable'_ 首先使用必要的缺失值设置处理单个度量值组,然后使用默认设置处理多维数据集的其余部分。
    这里的主要问题 - 如何处理 立方体的其余部分。您可能拥有基于数据更新知识动态创建处理 XMLA 脚本的复杂系统(我使用 SSIS 完成);在这种情况下,你不会问这个问题。假设您的环境更简单 - 您更新多维数据集并希望将其作为一个整体进行处理。在这种情况下,我会建议以下工作流程:

    1. 处理默认所有维度(将进行初始处理或结构更改)
    2. 处理更新所有维度
    3. 带有 Unprocess 的 Process Cube - 使其无效
    4. 处理您的特殊措施组
    5. 具有进程默认值的进程立方体

    这将首先更新维度,然后 - 从多维数据集中的所有度量值组中清除处理状态标志。之后,您使用特殊标志处理您的度量值组;这个设置这个MG的处理状态。然后在 Cube 上的 Process Default 期间 - 只会覆盖未处理的 MG,这会将您的特殊 MG 排除在处理范围之外。

    【讨论】:

      【解决方案2】:

      答案有点复杂,但这篇文章很好地解释了它,包括像我这样的 SSAS 挑战者的屏幕截图。

      http://msbusinessintelligence.blogspot.com/2015/06/handling-null-dates-in-sql-server.html?m=1

      【讨论】:

      • 是的,最好的办法是在您的日期维度中包含一个未知的过去日期和一个未知的未来日期。将您的事实映射到那些键。在你的情况下,因为项目完成是在未来我会使用它。如果您使用日期作为主键,则多次使用 1/1/1900 和 12/31/2999。虽然整数或 VARCHAR() 作为主键也可以注入一些逻辑。
      猜你喜欢
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      相关资源
      最近更新 更多