2017-03-05 30 views
1

我有两个表从Azure的SQL在PowerBI,使用直接查询:一个一对多的关系总是变成多到一个由PowerBI

  • EMP(empID PK)
  • contactInfo(contactID PK, empID FK, contactDetail)

其中从EMP.empIDcontactInfo.empID有明显的一对多关系。外键约束被成功执行。

但是我只能在PowerBI中创建多对一的关系(contactInfo.empIDEMP.empID)。如果我尝试相反的话,PowerBI总是自动将关系转换为多对一(通过交换from和column),这阻止了我创建视觉效果。 PowerBI认为这两者是否相同?

更新:

我在做什么是刚刚创建PowerBI表显示了连接这两个表的结果。外键约束是contactInfo.empID REFERENCES EMP.empID,它是多对一的。这应该不是问题,我想,因为我可以直接使用SQL查询连接。

请同时建议我是否应该在相反的方向创建外键。

上未能创造视觉

确切的错误信息更多信息是:

Can't display the data because Power BI can't determine 
the relationship between two or more fields. 
Version: 2.43.4647.541 (PBIDesktop) 

要重现错误:

DB模式如下:

schema

我想要的是PowerBI中的一张表,显示了员工的联系和销售信息,即加入所有四个表。当表视觉的VALUES包含“empName,contactDetail,contactType,productName”时会发生该错误,但是,如果仅包含“empName,contactDetail,contactType”或“empName,productName”,则不会发生错误。起初我认为问题可能在于contactInfo和emp之间的关系,但现在看起来更复杂。我想这可能是由多个一对多关系造成的?

+1

这看起来像PowerBI中的一个bug。我可以很容易地用localdb重现它。但是,我不明白:这是如何防止可视化?您是否可以用一些测试数据和指导说明如何尝试创建不起作用的可视化文件? (FWIW:[这里是一个最小的repro](http://sqlfiddle.com/#!9/72ef3/1)我用来确认你的bug。) – Jeroen

+0

@Jeroen请参阅我的问题中的其他信息。 – Ryan

+1

您已添加帮助的详细信息,但[mcve]会更好。您可以添加(a)一些DDL和DML来设置一个最小测试数据库,类似于我之前评论中的链接示例,并且(b)添加一些步骤来获取PowerBI以设置具有问题的可视化。这会让我们更容易帮忙。 – Jeroen

回答

2

扩大我的意见作出答复:

的问题

在你的数据模型的根,一个员工可以有多个联系人和多个销售。但是,Power BI无法知道哪个contactDetail对应哪个产品名称,反之亦然(它需要知道将它们一起显示在表中)。

再阐释

假设你有1 EMP行,即加入到10列销售表,并在CONTACTINFO表13行。在SQL中,如果从emp行开始,并将外部联接启动到其他2个表,则会返回(1 * 10)*(1 * 13)行(共130行)。对销售表中的每一行重复contactInfo表中的每一行。

如果您做了类似销售总结的事情,并且没有意识到单个销售记录重复了13次,但可能没有问题(例如,如果您只是想要销售清单和所有关联的联系人)。

电力BI与SQL

电力BI工作稍有不同。 Power BI主要用于汇总数字,然后按不同属性对其进行分解。例如。按产品销售。通过联系销售。按天销售。为了做到这一点,Power BI需要100%知道如何在桌面上的属性之间划分数字。

在这一点上,我会注意到您的数据库关系图并未包含任何使用Power BI进行聚合的明显指标。但是,Power BI不知道这一点。无论您是否有指标汇总,它的表现都是一样的。 (和失败一切,电力BI总是可以指望你行进行度量)。

比方说,你有你的销售指标表称为金额出售。如果您在empName产品名称带来,并销售金额列,电力BI将知道如何瓜分金额empName产品名称之间出售。这里没有问题。

现在加入contactDetail。使用您的数据库图表,Power BI无法知道表中的销售额如何与给定的contactDetail相关。它可能知道100美元属于empID 27.并且empID 27对应于contactInfo表中的3条记录。但它无法知道如何分配这三个联系人之间的100美元。

在SQL中,您会得到3个联系人,每个联系人都显示$ 100的销售额。但在Power BI中,这意味着售出300美元,事实并非如此。即使将100美元等分,也会产生误导。如果100美元完全属于1个联系人怎么办?相反,Power BI会显示您所看到的错误。

我的推荐

  1. 如果可以的话,我建议你把它英寸功率BI工作最好与一个事实表,其中将包含您的指标(如销售金额)之前,改变你的数据模型。然后,您可以将此事实数据表连接到任意数量的查找表(例如客户,产品等),直接。这使您可以使用任何查找表中的任意属性组合来划分指标&。我建议查看星型模式数据模型和查找表的概念:powerpivotpro.com/2016/02/data-modeling-power-pivot-power-bi
  2. 至少,你会想要扁平化表(即导入到你的数据模型之前合并CONTACTINFO销售表到一个表。
  3. 这可能是双向电力是不是你要完成什么是最好的工具。如果所有你想要的是一张表格,显示一个员工的联系信息&,没有任何相关的指标,定期报告工具+ SQL查询可能是一个更好的方式去

边注意:您不能反转许多:一个关系以通过此错误。 emp 表包含每个 empID的一行。 联系人信息销售10表包含多个具有相同 empID的行。 这意味着 emp表必须是与这两个表的关系的“一”一侧。你不能任意改变这一点。