Tsql 如何将成员组合分配到特定组中(对于OLAP维度)

Tsql 如何将成员组合分配到特定组中(对于OLAP维度),tsql,ssis,ssas,olap,dimensional-modeling,Tsql,Ssis,Ssas,Olap,Dimensional Modeling,我相信OLAP中会有一个相当常见的场景,但解决这个问题的一个非常好的方法并不是冲着我跳: 例如,我有一笔销售交易,有多种商品,每种商品都有不同的产品 我要做的是将产品组组合分配到一个类别中 i、 e.“只狗”、“只猫”、“猫和狗” 所以你最终会得到这样的结果 如果可能的话,我希望在Transact-SQL或SSIS中实现这一点,我发现计算成员/度量值很慢,如果这是最好的方法,我愿意使用该解决方案 非常感谢任何帮助好吧,如果您想在T-SQL中执行此操作,并且您只有一个表(如第二个示例),那么类

我相信OLAP中会有一个相当常见的场景,但解决这个问题的一个非常好的方法并不是冲着我跳:

例如,我有一笔销售交易,有多种商品,每种商品都有不同的产品

我要做的是将产品组组合分配到一个类别中 i、 e.“只狗”、“只猫”、“猫和狗”

所以你最终会得到这样的结果

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


非常感谢任何帮助

好吧,如果您想在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和名称

  • 这在大型表上节省了空间,而且速度更快。

    理想情况下,您应该为产品组设置一个表,并在产品维度上添加此信息


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

    如果您希望遵循维度建模的最佳实践(Kimball方法),您应该只有一个包含所有产品组的产品维度表。换句话说,您可以在一个维度中对所有产品属性进行反规范化。此产品维度将具有代理项ProductKey(在SQL Server中使用标识列)。该键即PK,将是事实表中的FK,该事实表包含所有交易。因此,基于您的简单模型,您的销售信息将有一个事实表,其中包含您的所有度量(金额、数量)和产品维度(ProductKey)的一个FK。您的产品维度将具有包括类别在内的所有产品属性


    在SSA中,只需在您的DSV中创建两个表,然后创建一个维度(产品),一切都会为您处理。

    顺便说一句,如果我的维度模型需要更改,那么我也愿意接受。基本上,我认为这些分组(猫、狗、狗和猫)我们描述的是一种“销售”而不是一种产品,因此我的想法是创建一个销售维度,并将分组作为该维度中的一个级别。是的,如果属性与产品无关,则应创建一个新维度。