我正在使用 SSAS 设置我的第一个维度数据库,并且我有这个 [Materials] 维度需要一个像这样的层次结构:
[PriceCode v] --> nullable
Price Code
...
[Material v]
Code
AltCode
Name
...
[Id v] --> not actually exposed as a hierarchy level
DateInserted
DateUpdated
DateDeleted
EffectiveFrom
EffectiveTo
问题是该[PriceCode]
属性可以为空;DSV 在 a[Materials]
和[PriceCodes]
表之间有一个外键,并且[Materials].[PriceCodeId]
可以为空。
有没有办法仍然定义可空属性是父级的层次结构?我摆弄过UnkownMember和UnknownMemberName以及属性键的NullProcessing设置,但无法获得要处理的维度。
如果有人可以通过基于业务键(即Code
字段;自然键包括EffectiveTo
字段,null
用于记录的当前图像)创建层次结构来确认我是否正在正确处理缓慢变化的维度问题,则加分,并将 SCD 元数据视为其自身的一个级别。
您实际上在一个问题中有2个问题。如果您为属性创建一个新问题,它会更整洁,我将剪切/粘贴其中的一半作为答案:)
可为空的父级别
您可能不想
NULL
在 OLAP 维度中使用 s,而 Kimball似乎也同意。这在某种程度上取决于您是否有
ETL
流程和数据仓库,或者您应该如何处理它们,但是有不同类型的“未找到”。想一想外键的区别,一个有一个空字段,另一个有一个字段已填充但无法(或不再)找到相关记录。我喜欢区分我
BLANK
的DATA ERROR
维度。在您的示例中,您可以区分“无价格代码”和“我再也找不到的价格代码”
如果你有一个
ETL
带有数据仓库的流程,你可以在你的ETL
流程中轻松处理它,如果你没有,你将需要在你的 DSV 查询中使用一些 case 语句。这个问题似乎揭示了底层数据仓库的问题。星型和雪花模式都有支持和反对的论点,但我个人倾向于星型模式,必要时混入一些雪花模式。
在任何情况下,数据清理和丢失的链接都需要在您到达 dsv 之前很久就在您的数据仓库中解决。
缓慢变化的维度属性
关于您
Slowly Changing Dimension
,我看不到维度中层次结构或键的数据类型会如何变化,因为维度不知何故是SCD
,这根本不重要。您只需要 ETL 中某处的有效性规则,它会被您的 SSAS 维度定义选中(请参见此处)。但是对于dimension key
您创建的任何内容,我建议您主要使用代理键,因为您的代理键可以是int
orbigint
而不是 varchar,这甚至可以大大提高属性键的性能。当然,数字键将表示“属性”,不一定包括有效性字段。记录的有效性是在维度表中的记录中指定的,但正如您所说,对于您的属性键来说不是必需的。
例如,这可能是您的维度数据
您可以在哪里选择 dimension_key 作为您的键,
key attribute
您可以选择 name 或 name_key 作为您的name
属性的键。确定它是否值得麻烦
name
取决于您的属性将拥有多少成员(并且您的关键属性通常拥有大多数成员)。SCD
最后,您拥有 a 的事实与您决定哪个键适合您的属性之间并没有任何关系。最终用户需求为您做出决定。在示例维度中,您希望按垫子的所有销售额报告在垫子下,并且当用户报告时,您的成员中没有 2 个垫子。