【问题标题】:Multiple relations between one Dimension table and one Fact table一张Dimension表和一张Fact表之间的多重关系
【发布时间】:2020-11-21 10:17:49
【问题描述】:

我最近才开始学习 Power BI,现在我尝试制作星型模型(1 个事实表和 1 个维度表),因为这是推荐的。

我的练习数据包含以下内容。

维度表: 公司名, 公司编号, 公司经理

事实表: 销售公司ID, 购买公司ID, 日期, 价格

我想我会在“公司 ID”和“销售公司 ID”之间以及“公司 ID”和“购买公司 ID”之间建立关系。维度表中的“公司 ID”是唯一的,而事实表中的 ID 则不是。所以我想建立从维度表到事实表的 1:many 关系。

我相信这将使我有机会了解哪家公司将哪种产品卖给了哪家公司。但是 Power BI 不允许我在这两个表之间建立多个活动关系。

我的数据建模错误还是有解决方案?我应该制作第二个维度表吗?一份给买家,一份给卖家?

【问题讨论】:

    标签: powerbi powerbi-desktop


    【解决方案1】:

    两个表之间只能存在一个活动关系。有一些方法可以处理多个关系,但它有点复杂。 但是,您可以使用以下 dax 代码对事实表进行建模以解决此问题:

    Company Fac Table = 
    VAR __buyingTable = FILTER( 'Fact Table', NOT( ISBLANK( 'Fact Table'[Buying company ID] ) ) )
    VAR __sellingTable = FILTER( 'Fact Table', NOT( ISBLANK( 'Fact Table'[Selling company ID] ) ) )
    Return
    UNION (
        SELECTCOLUMNS (
            __buyingTable,
            "Company ID", 'Fact Table'[Buying company ID],
            "Date", 'Fact Table'[Date],
            "Price", 'Fact Table'[Price], 
            "Company type", "Buying Company"
        ),
        SELECTCOLUMNS (
            __sellingTable,
            "Company ID", 'Fact Table'[Selling company ID],
            "Date", 'Fact Table'[Date],
            "Price", 'Fact Table'[Price], 
            "Company type", "Selling Company"
        )
    )
    

    这个想法是创建一个大表,其中只有 1 个公司 ID 和一个 公司类型 列来区分买卖公司。

    所以你的最终模型应该是这样的:

    您可以使用电源查询来实现此目的,但这是最快的方法。

    【讨论】:

    • 感谢您回答我的问题!我是否正确理解每笔交易将变成 2 行?一份给卖家,一份给买家?
    • 不,每笔交易只有 1 行。
    • 怎么样?您说只有 1 个公司 ID 和一个列公司类型。每笔交易当然涉及 2 家公司。
    【解决方案2】:

    当事实和维度之间存在多种关系时,这些关系称为角色扮演维度。

    在这种情况下,最简洁的解决方案通常是为每个角色创建维度视图。

    您可以仅为一个角色创建一个视图,并为另一个角色直接连接到表维度,但这不太容易理解,并且鉴于创建视图的开销最小,我通常会为每个角色创建一个视图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 2021-07-11
      • 2015-08-02
      • 2018-12-01
      相关资源
      最近更新 更多