SSAS 和来自多个其他 sims 的计算维度
SSAS and calculated dimention from multiple other dims
给定 3 个维度 DimA、DimB 和 DimC,并将一些 DimSk、DimId 和 DimName 作为属性,问题被定义为“添加到多维数据集新属性,计算如下”:
NewAttr =
CASE
WHEN DimC.DimId IN (1, 2, 3) THEN 'A ' + DimA.DimName
WHEN DimC.DimId IN (4, 5, 6) THEN 'B ' + DimB.DimName
END
所有尺寸均直接来自 SKs 的 Fact。
您将如何在 multidim SSAS 立方体中解决这个问题?
!警告!下面的剧透 - 在阅读我的之前尝试考虑解决方案!
我目前的方法是计算 Dims ID 之间的 CROSS JOIN (~100x100x100)。
然后我可以计算 DimNew 的复合 NK 作为 ID ~ DimA.DimId+|+DimB.DimId+|+DimC.DimId
。
然后我也可以将此 ID 添加到事实 ETL,并按预期使用 NewAttr 为新暗淡构建新 ETL。
然后我可以在 cube new dim 中添加并添加新的事实列并通过 ID/SK 加入它们。
应该可行,还是有 10 倍更好的解决方案?
最终事实可以是这样的:
FactId, DimASK, DimBSK, DimCSK, DimNewSK
or
FactId, DimASK, DimBSK, DimCSK, NewAttr
- 第二个在数据库上没有 NewDim 的情况下又快又脏 - 但事实可以部分处理,因此当 DimNamein 暗淡会及时改变时,不同的可以为相同的复合 NK 产生不同的 NewAttr...
好啦好啦!
似乎如果您实际上拥有所有 SK,然后添加所有需要的新维度,然后计算 NewAtr,然后在立方体中创建新的 Dim,并将所有 SK 作为复合键 - 它的关键步骤。
重要的是不要使用来自身份的新暗淡的 DimNewSK 或其他东西作为立方体中的键。
复合键允许与事实建立简单的正则关系,并且无需额外的虚拟键即可工作。
图片是千言万语——毕竟看起来很简单:
给定 3 个维度 DimA、DimB 和 DimC,并将一些 DimSk、DimId 和 DimName 作为属性,问题被定义为“添加到多维数据集新属性,计算如下”:
NewAttr =
CASE
WHEN DimC.DimId IN (1, 2, 3) THEN 'A ' + DimA.DimName
WHEN DimC.DimId IN (4, 5, 6) THEN 'B ' + DimB.DimName
END
所有尺寸均直接来自 SKs 的 Fact。 您将如何在 multidim SSAS 立方体中解决这个问题?
!警告!下面的剧透 - 在阅读我的之前尝试考虑解决方案!
我目前的方法是计算 Dims ID 之间的 CROSS JOIN (~100x100x100)。
然后我可以计算 DimNew 的复合 NK 作为 ID ~ DimA.DimId+|+DimB.DimId+|+DimC.DimId
。
然后我也可以将此 ID 添加到事实 ETL,并按预期使用 NewAttr 为新暗淡构建新 ETL。
然后我可以在 cube new dim 中添加并添加新的事实列并通过 ID/SK 加入它们。
应该可行,还是有 10 倍更好的解决方案?
最终事实可以是这样的:
FactId, DimASK, DimBSK, DimCSK, DimNewSK
or
FactId, DimASK, DimBSK, DimCSK, NewAttr
- 第二个在数据库上没有 NewDim 的情况下又快又脏 - 但事实可以部分处理,因此当 DimNamein 暗淡会及时改变时,不同的可以为相同的复合 NK 产生不同的 NewAttr...
好啦好啦! 似乎如果您实际上拥有所有 SK,然后添加所有需要的新维度,然后计算 NewAtr,然后在立方体中创建新的 Dim,并将所有 SK 作为复合键 - 它的关键步骤。
重要的是不要使用来自身份的新暗淡的 DimNewSK 或其他东西作为立方体中的键。
复合键允许与事实建立简单的正则关系,并且无需额外的虚拟键即可工作。
图片是千言万语——毕竟看起来很简单: