如何将成员组合分配到特定组(对于 OLAP 维度)
Posted
技术标签:
【中文标题】如何将成员组合分配到特定组(对于 OLAP 维度)【英文标题】:How to assign combinations of members into specifc groups (for OLAP dimensions) 【发布时间】:2012-05-03 01:20:06 【问题描述】:我有一个我认为在 OLAP 中相当常见的场景,但解决它的一个非常好的方法并没有让我大吃一惊:
我得到了一个包含多个项目的销售交易,每个项目都有不同的产品..
我想要做的是将产品组组合分配到一个类别中 即“仅限狗”、“仅限猫”、“猫和狗”
所以你最终会得到类似......
如果可能的话,我希望在 Transact-SQL 或 SSIS 中实现这一点,我发现计算成员/度量很慢,如果这是最好的方法,我愿意接受该解决方案
非常感谢任何帮助
【问题讨论】:
顺便说一句,如果我的维度模型需要更改,那么我也愿意.. 【参考方案1】:如果您想遵循维度建模的最佳做法(Kimball 方法),您应该只有一个包含所有产品分组的产品维度表。换句话说,您在一维中对所有产品属性进行非规范化。此产品维度将有一个代理键 ProductKey(使用 SQL Server 中的标识列)。这个是 PK 的键,将是您的事实表中的 FK,它包含所有的事务。因此,根据您的简单模型,您将拥有一个用于销售信息的事实表,其中包含您的所有度量(数量、数量)和一个针对您的产品维度(ProductKey)的 FK。您的产品维度将包含所有产品属性,包括类别。
在 SSAS 中,只需将两个表放入 DSV 并创建一个维度(产品),一切都会为您处理好。
【讨论】:
基本上我认为这些分组(猫、狗、狗和猫)描述的是一种“销售”类型,而不是一种产品,所以我的想法是创建一个销售维度并进行分组作为该维度中的一个级别 是的,如果属性与产品无关,您应该创建一个新维度。【参考方案2】:好吧,如果您想在 T-SQL 中执行此操作并且您只有一个表(如您的第二个示例),那么这样的事情就可以解决问题:
update [transactions_table] set [product_group] = 'dog only'
where [product] in ('labrador', 'st bernard')
update [transactions_table] set [product_group] = 'cat and dog'
where [product] in ('chihuahua', 'tabby')
update [transactions_table] set [product_group] = 'cat only'
where [product] in ('persian')
但我建议将信息分成不同的表格:
-
交易,只有产品 ID,没有名称
产品,具有 ID、名称和类别 ID
类别,有 id 和 name
这样可以节省空间并在大桌子上更快。
【讨论】:
【参考方案3】:理想情况下,您应该有一个产品组表并将此信息添加到您的产品维度。
如果您已经有了填充此信息的问题,您应该在 SSIS 上使用查找转换来获取产品组
【讨论】:
以上是关于如何将成员组合分配到特定组(对于 OLAP 维度)的主要内容,如果未能解决你的问题,请参考以下文章
如何将Spring Boot RepositoryRestResource映射到特定的URL