You need to enable JavaScript to run this app. 如何使用Power Query在Power BI中实现多列纵向堆叠
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Power Query在Power BI中实现多列纵向堆叠

Power Query 多列堆叠(宽转长)实现方案

场景匹配说明

  • 原始数据集结构:共4列,分别为Processo、Finalidade 1、Finalidade 2、Finalidade 3,对应样例值如下:
    • Processo=1行:Finalidade 1为Maçã、Finalidade 2为Banana、Finalidade 3为Mamão
    • Processo=2行:Finalidade 1为Banana、Finalidade 2/3为空值
    • Processo=3行:Finalidade 1为Mamão、Finalidade 2为Banana、Finalidade 3为空值
  • 目标输出:生成仅包含Processo、Finalidade两列的结果表
  • 核心规则:严格按照Finalidade 1→Finalidade 2→Finalidade 3的列顺序逐列纵向堆叠,每列堆叠时完整保留对应行的Processo值,所有原始空值不做过滤、直接保留在对应位置

常见操作误区

直接对全表执行转置操作无法满足需求:全表转置会整体互换表的行列关系,打乱Processo字段与各Finalidade字段值的绑定关联,无法实现“每携带一个Finalidade值同步匹配对应Processo值”的逻辑。

分步操作流程

  • 进入Power Query编辑器,加载目标原始数据集
  • 选中Processo列作为需要全程保留的关联键列
  • 依次点击顶部「转换」选项卡 →「逆透视列」下拉菜单 →逆透视其他列
    • 该操作会自动将未被选中的Finalidade 1/2/3列识别为待堆叠的属性列,逐行匹配对应的Processo值完成纵向拼接
  • 将逆透视后自动生成的值列重命名为Finalidade,删除自动生成的属性列即可得到基础堆叠结果
    • 系统默认会完整保留所有原始空值,无需额外设置规则过滤空值
  • (可选)如果需要严格按照Finalidade 1→2→3的顺序排列堆叠结果,可增加辅助排序步骤:
    1. 保留逆透视生成的属性列,新增自定义列,输入公式= if [属性] = "Finalidade 1" then 1 else if [属性] = "Finalidade 2" then 2 else 3
    2. 对新增的排序辅助列执行升序排序,确认顺序符合要求后删除属性列和辅助排序列即可

参考M代码片段

let
    // 替换为你的实际数据源引用
    原始数据源 = Excel.CurrentWorkbook(){[Name="原始表"]}[Content],
    // 以Processo为保留列,逆透视其余所有列
    逆透视结果 = Table.UnpivotOtherColumns(原始数据源, {"Processo"}, "属性", "Finalidade"),
    // 新增按Finalidade列顺序的辅助排序列
    排序辅助列 = Table.AddColumn(逆透视结果, "sort_key", each 
        if [属性] = "Finalidade 1" then 1 
        else if [属性] = "Finalidade 2" then 2 
        else 3, Int64.Type),
    // 按辅助键排序保证堆叠顺序
    排序完成 = Table.Sort(排序辅助列, {{"sort_key", Order.Ascending}}),
    // 删除冗余列得到最终结果
    最终结果 = Table.RemoveColumns(排序完成, {"属性", "sort_key"})
in
    最终结果

内容的提问来源于stack exchange,提问作者Carlos Guimarães

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 21:54:05