一对多表关系

时间:2019-04-02 10:45:29

标签: xml database-design powerbi

我对Power BI非常陌生,所以请耐心等待。因此,假设我有3个XML工作表(我的Power BI初始数据源),其中2个是如下的简单表:

Tables b and c

bc代表如上所述的两个XML文件。 File a如下:

Software
+
|
|  Microsoft
|   +
|   +--->Windows 10
+-->+
|   +--->Windows 7
|
| Google
|   +
|   +-->Chrome
+-->+
    +-->Mail

或采用XML如下:

<?xml version="1.0"?>
<Software Name = "Company Software">
  <HeadProduct Name = "Google">
    <Product>Chrome</Product>
    <Product>Mail</Product>
  </HeadProduct>
  <HeadProduct Name = "Microsoft">
    <Product>Windows 10</Product>
    <Product>Windows 7</Product>
  </HeadProduct>
</Software>

现在这是我的问题:在我的数据集中,我只有一个 Table a带嵌套信息,还有几个Tables b, c, d etc.带映射Table a中的元素

Microsoft ----> Table b
Chrome ----> Table c 
Windows 10  ----> Table d 
...

如何在BI中处理和实现这种关系?如果可以的话,可以更改File a的结构。

谢谢。

1 个答案:

答案 0 :(得分:2)

我认为这更像是“两阶段”联接,而不是一对多。

您称为“ b”,“ c”等的文件似乎都具有相同的架构。我的方法是合并(追加)这些数据集,并在每个数据集上添加一列,以将记录标记为需要与任何特定的“ Head Product”结合起来

将“房间”文件添加到单个“房间”表之后,然后在软件表和房间表之间进行合并。

在我看来,这确实代表了多对多联接,除非您真正想要的是笛卡尔联接,否则这很重要。

好的,您要求一些示例。因此,我在上方将您的表格输入到PowerBI。
enter image description here enter image description here enter image description here

第一步是获取表B并添加一列,以帮助它与表A中的主产品相关。因此,我编辑查询,转到添加列功能区,如下所示添加自定义列:

enter image description here

对所有“房间”文件执行此操作。如果您不必手动添加此字段,那将是理想的选择。可能是您可以利用文件夹连接器中的文件名,或者如果您拥有生成这些文件的过程,则可以将其添加到列集中。一切由您决定。

查看“查询”区域,然后在最后一个查询下单击鼠标右键。将鼠标悬停在菜单项上以遍历“新建查询”>“合并”>“将查询追加为新建”-您将得到以下结果:

enter image description here

现在返回表A。从“主页”功能区进行“合并查询”。

enter image description here

展开合并的列。

enter image description here

结果:

enter image description here