0

我有我认为在 OLAP 中相当常见的场景,但解决它的一个非常好的方法并没有让我跳出来:

我得到了一个包含多个项目的销售交易,每个项目都有不同的产品..

在此处输入图像描述

我想要做的是将产品组组合分配到一个类别中,即“仅限狗”、“仅限猫”、“猫和狗”

所以你最终会得到类似..

在此处输入图像描述

如果可能的话,我希望在 Transact-SQL 或 SSIS 中实现这一点,我发现计算的成员/度量很慢,如果这是最好的方法,我愿意接受那个解决方案

非常感谢任何帮助

4

3 回答 3

1

如果您想遵循维度建模的最佳实践(Kimball 方法),您应该只有一个包含所有产品分组的产品维度表。换句话说,您在一维中对所有产品属性进行非规范化。此产品维度将有一个代理键 ProductKey(使用 SQL Server 中的标识列)。这个是 PK 的键,将是您的事实表中的 FK,它包含所有的事务。因此,根据您的简单模型,您将拥有一个用于销售信息的事实表,其中包含您的所有度量(数量、数量)和一个针对您的产品维度(ProductKey)的 FK。您的产品维度将包含所有产品属性,包括类别。

在 SSAS 中,只需将两个表带入您的 DSV 并创建一个维度(产品),一切都会为您处理好。

于 2012-05-03T20:01:26.700 回答
0

好吧,如果您想在 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')

但我建议将信息分成不同的表格:

  1. 交易,只有产品 ID,没有名称
  2. 产品,具有 ID、名称和类别 ID
  3. 类别,有 id 和 name

这样可以节省空间并在大桌子上更快。

于 2012-05-03T07:35:44.907 回答
0

理想情况下,您应该有一个产品组表,并将此信息添加到您的产品维度上。

如果您已经有并且您的问题来填充此信息,您应该使用 SSIS 上的查找转换来获取产品组

于 2012-05-03T09:35:03.940 回答