在 Power BI 中解析名称值对列表
Parsing a list of name value pairs in Power BI
背景
我需要根据锁定在防火墙严密的 PostgreSQL 数据库中的数据创建 Power BI report/dashboard。将 Power BI 直接连接到数据库不是一种选择。但是,我可以在同一台服务器上访问 Python 脚本 运行,因此编写一个简单的 extract/transform 脚本并将数据显示为 XML 或 [=36= 是相当简单的].
问题
我是 Power BI 新手,我不知道如何将我的数据转换为 Power BI 桌面中的 tables
这是一个例子
标准销售演示的来源 Table
Month | Count
_____________
Jan | 100
Feb | 150
Mar | 200
...
这就是我在 Power BI 的另一端想要的 table
我试过了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 解析它。数据加载后,我可以深入到行,但无法弄清楚如何以 table 的形式读入 - 我最终得到的是 table 列表, table 和只有一行或 table 的 tables
Power Query 对键值对数据(M 记录)和表格数据(M table)有不同的表示。
如果您使用 Xml.Tables
库函数并向下钻取,从 XML 中获取 tables 很容易:
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
来制作两列 table.
背景
我需要根据锁定在防火墙严密的 PostgreSQL 数据库中的数据创建 Power BI report/dashboard。将 Power BI 直接连接到数据库不是一种选择。但是,我可以在同一台服务器上访问 Python 脚本 运行,因此编写一个简单的 extract/transform 脚本并将数据显示为 XML 或 [=36= 是相当简单的].
问题
我是 Power BI 新手,我不知道如何将我的数据转换为 Power BI 桌面中的 tables
这是一个例子 标准销售演示的来源 Table
Month | Count
_____________
Jan | 100
Feb | 150
Mar | 200
...
这就是我在 Power BI 的另一端想要的 table
我试过了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 解析它。数据加载后,我可以深入到行,但无法弄清楚如何以 table 的形式读入 - 我最终得到的是 table 列表, table 和只有一行或 table 的 tables
Power Query 对键值对数据(M 记录)和表格数据(M table)有不同的表示。
如果您使用 Xml.Tables
库函数并向下钻取,从 XML 中获取 tables 很容易:
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
来制作两列 table.