Excel电源查询;将表格展开为列

Posted

技术标签:

【中文标题】Excel电源查询;将表格展开为列【英文标题】:Excel Power Query; Expand table into columns 【发布时间】:2021-11-19 23:41:12 【问题描述】:

我有两个要合并的表,但我不能完全按照我希望的方式进行合并。第一个是日期列表和一些数据,第二个是当天售出物品的排名以及售出数量等。我想将前“x”项作为列添加到我的每日数据中。我得到了合并工作,所以现在我有一个写着“表格”的列。但是,如果我展开表格,每个项目都会变成自己的行。相反,我希望表项 2 使用后缀重复其所有列。

date total_sales items
1/1/21 $50000 table
1/2/21 $40000 table
date total_sales items_1 units_1 items_2 units_2
1/1/21 $50000 pens 15 pencils 10
1/2/21 $40000 erasers 35 pens 5

等等

我可以使用 Visual Basic 做到这一点,但我认为这不是最好的方法。谢谢你的帮助!另外,我可以搜索此操作的特定术语吗?

【问题讨论】:

【参考方案1】:

假设您的第二个表格如下所示:

首先,让我们按日期分组,我们对子表进行排序和索引。 (这是最难的一步。)

一旦我们有了每个组的索引,就将那一列展开回来,这样我们就回到了起点,除了新的索引列。

从这里,您可以过滤索引以仅获取前 N 个,然后取消旋转 [items] 和 [units] 列。

合并[索引]和[属性]

然后以 [Merged] 为中心

哒哒!现在您的数据已成型,以便您可以轻松地将其与第一个表合并。


这是此示例的完整代码。 (您可以将其粘贴到高级编辑器中并查看应用步骤。)

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMtQ31DcyMDJU0lEqSM0rBlKGpkqxOugSyZk5YDkDqJwRTC61KLE4tQgkZ2yKLgc1EMM8hB5sWqBWGSnFxgIA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [date = _t, items = _t, units = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,"date", type date, "items", type text, "units", Int64.Type),
    #"Grouped Rows" = Table.Group(#"Changed Type", "date", "indexed", each Table.AddIndexColumn(Table.Buffer(Table.Sort(_, "units", Order.Descending)), "Index", 1, 1, Int64.Type), type table),
    #"Expanded indexed" = Table.ExpandTableColumn(#"Grouped Rows", "indexed", "items", "units", "Index", "items", "units", "Index"),
    #"Filtered Rows" = Table.SelectRows(#"Expanded indexed", each [Index] < 3),
    #"Unpivoted Columns1" = Table.UnpivotOtherColumns(#"Filtered Rows", "date", "Index", "Attribute", "Value"),
    #"Merged Columns" = Table.CombineColumns(Table.TransformColumnTypes(#"Unpivoted Columns1", "Index", type text, "en-US"),"Attribute", "Index",Combiner.CombineTextByDelimiter("_", QuoteStyle.None),"Merged"),
    #"Pivoted Column1" = Table.Pivot(#"Merged Columns", List.Distinct(#"Merged Columns"[Merged]), "Merged", "Value"),
    #"Changed Type1" = Table.TransformColumnTypes(#"Pivoted Column1","items_1", type text, "units_1", Int64.Type, "items_2", type text, "units_2", Int64.Type)
in
    #"Changed Type1"

我做特殊 M 语言魔术的唯一地方(不仅仅是单击 GUI 中的东西)是这一步,我通过对其中一个子表应用几个步骤并将 GUI 生成的代码粘贴回去来创建逐步进入组(加上 Table.Buffer 包装器以确保排序“坚持”)。

#"Grouped Rows" =
    Table.Group(
        #"Changed Type",
        "date",
        
            "indexed", each
                Table.AddIndexColumn(
                    Table.Buffer(
                        Table.Sort(_, "units", Order.Descending)
                    ),
                    "Index", 1, 1, Int64.Type
                ), type table
            
        
    ),

【讨论】:

【参考方案2】:

我觉得这个视频可以很好的解决你的问题。

Concatenate, Merge or Combine multiple rows into one value - Power Query for Power BI

【讨论】:

以上是关于Excel电源查询;将表格展开为列的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询根据两列动态将行转换为列

hutool工具导出excel代码示例

hutool工具导出excel代码示例

在电源查询中调整 Excel 公式栏的大小

使用反应时如何将表格行转换为列

如何使用sql语句和vba将数据从MS-Access导入excel power查询?