【问题标题】:Power Query: Easy way to add columns for changing JSON data sourcePower Query:添加列以更改 JSON 数据源的简单方法
【发布时间】:2020-11-14 04:27:40
【问题描述】:

我是 PQ 的新手,所以可能有一个简单的答案。

假设我正在从本地 JSON 文件加载数据行。然后我使用我认为是一组相当标准的步骤来扩展它:

report = Json.Document(File.Contents("path\to\my\file")),
#"Converted to Table" = Table.FromList(report, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", { /* a long list of properties from my json */},
// a long list of statements that operate on various columns: reorder, cast to type, rename, add conditional columns, etc.

每个 sprint 左右,我的 JSON 中都会添加一些新属性,我还需要将它们合并到报告中并对其进行操作。有没有一种直接的方法,不需要我回到那个Table.ExpandRecordColumn,每次都将它们添加到括号中的属性名称集中,然后手动重命名和重新排序它们?如果有一种方法可以使用 UI 来做到这一点,我会很高兴,但如果有一种使用高级编辑器的方法比我刚才描述的方法更简单,我会接受它。我这样做的方式似乎并不那么有效。

谢谢。

【问题讨论】:

    标签: powerbi powerquery


    【解决方案1】:

    您似乎有一个记录列表,您想将其转换为表格。


    如果所有记录(在您的列表中)都包含完全相同的字段名称,那么您可以使用以下简单的方法:

    let
        // Instead of File.Contents, I've hard coded some JSON for example purposes.
        report = Json.Document("[{""a"":1,""b"":2,""c"":1},{""a"":4,""b"":1,""c"":5},{""a"":5,""b"":3,""c"":1}]"),
        initialTable = Table.FromRecords(report)
    in
        initialTable
    

    (在这里,使用Table.FromRecords 似乎比使用Table.FromListTable.ExpandRecordColumn 更合适。)


    但是,如果您的记录具有不同的字段,但您仍想扩展整个列表中存在的所有字段,那么您可以动态构建一个详尽的字段名称列表:

    let
        // Instead of File.Contents, I've hard coded some JSON for example purposes.
        report = Json.Document("[{""a"":1,""b"":2},{""b"":1,""c"":5},{""a"":5,""c"":1}]"),
        fieldsToExpand = List.Distinct(
            List.Combine(List.Transform(report, Record.FieldNames))
        ),
        initialTable = Table.FromRecords(report, fieldsToExpand, MissingField.UseNull)
    in
        initialTable
    

    MissingField.UseNull 告诉 Power Query 在记录不包含特定字段的情况下使用 null。否则,我相信它会引发与缺少字段相关的错误。)

    【讨论】:

    • 感谢您的回复。我的问题是针对 JSON 的形式发生变化(即它所代表的对象的属性发生变化)的情况。这些新属性不会自动“出现”在我的电源查询中。我一直在手动将它们添加到 Table.ExpandRecordColumn 语句中,这可能需要一段时间,而且看起来很笨拙。我想知道是否有更好的方法来做这件事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多