【问题标题】:Structuring a cube with paths from a fact table to a dimension via two alternative intermediate dimensions通过两个可选的中间维度构建具有从事实表到维度的路径的多维数据集
【发布时间】:2015-01-09 06:42:00
【问题描述】:

我不确定如何在 SSAS 中为复杂情况配置多维数据集,我可以将其简化如下:

  1. 事实表存储有关销售的数据。
  2. 名为 Promotion 的维度记录了产生销售的营销活动的详细信息
  3. 名为 Customer 的维度记录了我们销售对象的详细信息
  4. 我们还有一个表格,其中包含有关组织的数据
  5. 在某些(但不是所有)情况下,促销活动针对的是组织。从促销到组织之间存在可选的一对一关系。
  6. 在某些(但不是所有)情况下,客户与组织相关联。客户与组织之间存在可选的多对一关系。
  7. 我们希望能够按组织分析销售额。例如,如果我按组织报告销售数量,则每个组织的计数应包括针对该组织的促销活动向与该组织关联的客户的销售。

请注意,使用此数据结构,每个销售可能与 0、1 或 2 个组织相关联,具体取决于促销和客户。因此,如果我按组织报告销售数量,总计不一定等于销售总数。

您将如何构建立方体?我认为它不能通过简单地从 Sales->Promotion->Organisation 和 Sales->Customer->Organisation 建立一个引用关系来工作,因为 SSAS 不知道使用哪条路径(当然也不知道它应该在两条路径上聚合在一起)。我要创建两个组织维度吗?我是否断开了组织与其他维度的联系,并在组织和销售之间定义了一些直接联系?我是否废弃了“组织”维度并将组织详细信息作为属性包含在“促销”和“客户”中?

【问题讨论】:

    标签: sql-server ssas cube olap-cube


    【解决方案1】:

    您是正确的,因为 SSAS 将无法通过一条路径上的 Promotion 和另一条路径上的 Customer 来处理引用组织维度。当您尝试构建多维数据集时,这会给您一个错误。

    由于每个销售可以与 0、1 或 2 个组织相关联,我建议在组织维度和销售事实之间使用桥接表(多对多)对此进行建模。这假设您在每个销售交易中都有一个唯一的 ID,以便您可以在销售事实上创建一个事实维度(无需在多维数据集中可见)。

    您在 ETL 流程中构建桥接表。它应该只包含 2 列,将组织 ID 与销售 ID 相关联。任何销售 ID 不应超过 2 个组织 ID。您的最终模型应如下所示:

     DimCustomer <---.
                     |
                  FactSale <---- BridgeSaleOrganisation ----> DimOrganisation
                     |
    DimPromotion <---´
    

    在 SSAS 的维度使用中,您使用 BrdigeSaleOrganisation 作为中间表在 FactSale 和 DimOrganisation 之间建立了多对多关系。完成后,按组织维度过滤销售,将通过桥表为您提供属于该组织的所有销售,无论它们是通过促销还是客户。

    有关多对多建模的更多示例,请查看“大师”、Marco Russo 和 Alberto Ferrari 的 this excellent paper

    【讨论】:

    • 谢谢丹。这听起来像是中肯的建议。而且你参考的文档非常全面。我会让赏金期顺其自然,以允许其他人添加他们的经验,但看起来 +50 即将到来。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-02
    • 2018-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多