2

背景

我需要从锁定在防火墙严密的 PostgreSQL 数据库中的数据创建 Power BI 报表/仪表板。将 Power BI 直接连接到数据库不是一种选择。但是,我可以访问在同一台服务器上运行的 Python 脚本,因此编写一个简单的提取/转换脚本并将数据呈现为 XML 或 JSON 是相当简单的。

问题

我是 Power BI 新手,我不知道如何将我的数据转换为 Power BI 桌面中的表

这是标准销售演示的示例源表

Month | Count
_____________
Jan   | 100
Feb   | 150
Mar   | 200
...

这就是我想要在 Power BI 另一端的表格

我试过 JSON:

{
    data: {
        sales: [
                {Jan:100},
                {Feb:150},
                {Mar:200}
               ]
          }
}

我已经尝试过 XML:

<root>
    <data>
        <sales>
            <period>
                 <month>Jan</month>
                 <count>100</count>
            </period>
            <period>
                 <month>Feb</month>
                 <count>100</count>
            </period>
            <period>
                 <month>Mar</month>
                 <count>200</count>
            </period>
      </sales>
   </data>
</root>

显然这是我正在使用的数据的简化版本,但它说明了问题

我尝试使用 UI 来解析它。数据加载,我可以深入到行,但无法弄清楚如何以表格形式读取 - 我最终得到一个列表表、一个只有一行的表或一个表

4

1 回答 1

4

Power Query 对键值对数据(M 记录)和表格数据(M 表)具有不同的表示形式。

如果您使用Xml.Tables库函数并向下钻取,则从 XML 获取表很容易:

let
    Source = Xml.Tables("<root>
    <data>
        <sales>
            <period>
                 <month>Jan</month>
                 <count>100</count>
            </period>
            <period>
                 <month>Feb</month>
                 <count>100</count>
            </period>
            <period>
                 <month>Mar</month>
                 <count>200</count>
            </period>
      </sales>
   </data>
</root>"),
    Table = Source{0}[Table],
    Table1 = Table{0}[Table],
    Table2 = Table1{0}[Table],
    #"Changed Type" = Table.TransformColumnTypes(Table2,{{"month", type text}, {"count", Int64.Type}})
in
    #"Changed Type"

如果您想使用 JSON,您应该将架构更改为单个 JSON 对象,而不是许多对象的列表。

let
    Source = Json.Document("{
    data: {
        sales: [{
                     Jan:100,
                     Feb:150,
                     Mar:200
                 }]
          }
}"),
    data = Source[data],
    sales = data[sales],
    sales1 = sales{0},
    #"Converted to Table" = Record.ToTable(sales1),
    #"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Name", "Month"}, {"Value", "Count"}})
in
    #"Renamed Columns"

前面的步骤Converted to Table是 M 记录,这可能会更有用,具体取决于您要对其执行的操作。您可以使用它Record.ToTable来制作一个包含两列的表格。

于 2015-08-19T07:08:39.510 回答