【问题标题】:SSAS & SCD2 - how to deal with IsActive row in DimSSAS & SCD2 - 如何处理 Dim 中的 IsActive 行
【发布时间】:2016-12-16 03:42:50
【问题描述】:

我正在使用 SQL Server 2014 和 Visual Studio 2015。
我有一个用于员工姓名的 SCD2,例如

SK     AltKey       Name            Gender    IsActive
1      15           Sven Svensson    M        1
2      16           Jo Jonsson       M        1

在事实表中

SK      AgentSK      CallDuration    DateKey
100     1            335             20160808
101     2            235             20160809

因此,您可以看到多维数据集当前已链接到 FctAgentSK 和 DimSK。这按计划工作。但是,当 Jo 更改性别时,SCD2 使该行处于非活动状态 (0) 并插入一个具有新性别和 IsActive 为“1”的新行。

我面临的问题是事实SK 101 仍然引用代理的“旧”详细信息。我应该如何处理这个问题才能仍然报告通话,但也参考代理的“正确”详细信息 - 反映他们当前的性别。

当插入一个新事实时,它将分配“新”SK,但基本上我需要报告发生在性别变化两侧的所有呼叫。

有什么建议吗?

谢谢。

【问题讨论】:

  • 这就是 SCD2 的工作方式——历史记录指向旧记录(及其属性)。新记录指向新记录(及其属性)。如果您想更改历史记录,请使用 SCD1(只需更新记录)。如果您不想要 SCD 功能,请不要使用它

标签: ssas scd scd2


【解决方案1】:

正如 Nick.McDermaid 所建议的,如果您不想要 SCD2 功能,您可以将其从维度设计中移除(我经常看到它在实际上并不需要时过度实现:也许您已经继承了那种设置?)。

如果您想要/必须保留 SCD2 设计,但想要报告当前员工属性(性别和任何其他 SCD2 属性)。

  1. Kimball 在此处记录了“类型 6”:SCD types 0,4,5,6,7。您将属性的“当前”值添加到现有的 Type2 设计。然后,您可以只报告“当前”属性。

  2. 我假设员工名称“Alt Key”是持久的员工密钥,通过员工属性的变化保持不变?您可以创建一个稍微不同的 Employee 维度(或 Employee 维度内的层次结构),它具有 Alt Key 作为其叶级键。如果您仍然没有 SK 作为维度属性,这将使维度表“折叠”为每个 AltKey 一个成员,而不是每个 SK 一个成员。显然,您不能将任何 SCD2 属性添加到此 Alt Key 层次结构中,因为每个键不会有一个值;这引发了关于如何调用持久的“员工”(即叶级别的名称列将是什么)的特殊问题,因为员工姓名是不会保留的最明显的 SCD2 属性之一相同。可能这种方法最好与维度数据中包含“当前值”的底层“Type6”结合使用,如上面(1)中所述。

【讨论】:

  • 谢谢@SebTHU 完全回答了我的问题。干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多