我有我认为在 OLAP 中相当常见的场景,但解决它的一个非常好的方法并没有让我跳出来:
我得到了一个包含多个项目的销售交易,每个项目都有不同的产品..
我想要做的是将产品组组合分配到一个类别中,即“仅限狗”、“仅限猫”、“猫和狗”
所以你最终会得到类似..
如果可能的话,我希望在 Transact-SQL 或 SSIS 中实现这一点,我发现计算的成员/度量很慢,如果这是最好的方法,我愿意接受那个解决方案
非常感谢任何帮助
我有我认为在 OLAP 中相当常见的场景,但解决它的一个非常好的方法并没有让我跳出来:
我得到了一个包含多个项目的销售交易,每个项目都有不同的产品..
我想要做的是将产品组组合分配到一个类别中,即“仅限狗”、“仅限猫”、“猫和狗”
所以你最终会得到类似..
如果可能的话,我希望在 Transact-SQL 或 SSIS 中实现这一点,我发现计算的成员/度量很慢,如果这是最好的方法,我愿意接受那个解决方案
非常感谢任何帮助
如果您想遵循维度建模的最佳实践(Kimball 方法),您应该只有一个包含所有产品分组的产品维度表。换句话说,您在一维中对所有产品属性进行非规范化。此产品维度将有一个代理键 ProductKey(使用 SQL Server 中的标识列)。这个是 PK 的键,将是您的事实表中的 FK,它包含所有的事务。因此,根据您的简单模型,您将拥有一个用于销售信息的事实表,其中包含您的所有度量(数量、数量)和一个针对您的产品维度(ProductKey)的 FK。您的产品维度将包含所有产品属性,包括类别。
在 SSAS 中,只需将两个表带入您的 DSV 并创建一个维度(产品),一切都会为您处理好。
好吧,如果您想在 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')
但我建议将信息分成不同的表格:
这样可以节省空间并在大桌子上更快。
理想情况下,您应该有一个产品组表,并将此信息添加到您的产品维度上。
如果您已经有并且您的问题来填充此信息,您应该使用 SSIS 上的查找转换来获取产品组