暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

已经在SQL或PQ去重, 在Power BI建立关系时却提示“多对多”?!

PowerBI最佳实践 2021-08-27
3191

  最近一位同事求助:“ 我已经在PQ去重, 但是建立关系时还是提示“多对多”,排查了很久没找到问题,已经快疯了!”




场景重现:

  由于相同的"Product Name"会有在不同"Manufacturer"生产的情况,所以为了保证主键的唯一性。执行了两个步骤:

  1. 在PQ界面创建了一个联合主键PorductKey


      [Product Name] & [Manufacturer] 联合主键
    • 删除重复



      然而, 当建立关系时候, 却提示"多对多"关系。





    问题排查:

      找到联合主键PorductKey中的重复值

    1. 创建创建一个度量值IssueDiscoverer ,计算product表中的行

        IssueDiscoverer =
        COUNTROWS( 'Product' )
      • 将联合主键PorductKey, 放在矩阵的行,IssueDiscoverer 放在值上。找到数字大于一的值是"WWI Wall Lamp E315 SilverWIDE WORLD IMPORTERS"。



      • 转到Product 表的Power Query 界面,发现虽然在执行了删除重复,因为Manufacturer有两个相同值为"WIDE WORLD IMPORTERS" 和 "Wide World Importers",但是大小写不同。








      解决方案:

        问题已经发现: PQ(Power query) 严格区分大小写,执行去重操作时,不同大小写的相同值将被认为是非重复值。(SQL某些去重函数例如DISTINCT也有相同行为),然而在Power BI 客户端界面,建立关系和将字段放在可视化行列轴时候, 却默认不区分大小写, 即:不同大小写的相同值将被认为是重复值

        由于我们无法修改Power 客户端这种默认行为,那么我们在PQ或者使用SQL函数, 可以将联合主键使用到的字段内的值统一改成大写或者小写。

        这里,我们在建立ProductKey主键和去重步骤前,插入新的步骤:

        将"Prodcut Name"和"Manufacturer"的值在PQ 界面全部改成大写如下:

        


      然后, 再和Sales 事实表, 建立关系,成功建立“一对多” 关系,如下:





      最佳实践

      在Power BI中创建主键时,应该遵循:

      1.  如果条件允许, 总是使用数字而非文本字符串

      2.  总是在PQ界面对主键"删除空"

      3.  如果使用联合主键,总是在连接的两列中间加入特殊字符, 例如"^", "*" 

      4.  如果使用联合主键,总是使用SQL函数或者在PQ 界面将英文字母统一转化为大写或小写

      文章转载自PowerBI最佳实践,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论