You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Power BI如何正确完成行列转置 单列透视及DAX实现失败解决方案咨询

双列透视转置解决方案

优先推荐使用Power Query操作,这是Power BI中专门处理数据结构变形的工具,操作门槛更低、运行效率更高:

方法1:Power Query操作步骤

  • 打开Power BI的「Power Query编辑器」,选中你的原始数据表
  • 按住Ctrl选中2020 Price、2021 Price两列,右键点击「逆透视列」,执行后会生成两列新数据:属性(存放原列名)、值(存放对应价格)
  • 选中属性列,点击「转换」选项卡下的「替换值」,将查找值设置为 Price,替换值留空,执行后该列就会变成纯年份(2020/2021),可将列名改为Year
  • 选中City列,点击「转换」选项卡下的「透视列」,在弹出的设置窗口中:
    • 值列选择刚才生成的值列
    • 聚合值函数选择「不要聚合」
  • 执行后导出表格即可,得到的结构和你预期的右侧表格完全一致。

方法2:DAX代码修正方案

你之前的代码存在两个核心问题:一是Table2中生成的Year值为2020 Price,和SWITCH判断条件里的2020无法匹配;二是CALCULATE的筛选上下文设置有误,没有正确关联交叉连接的上下文。修正后的代码如下:

NewTable = 
VAR YearList = DATATABLE("Year", STRING, {{"2020"}, {"2021"}})
VAR CrossTable = CROSSJOIN(VALUES('Table1'[ID]), YearList)
RETURN
ADDCOLUMNS(
    CrossTable,
    "New York", CALCULATE(
        SWITCH(
            [Year],
            "2020", SUM('Table1'[2020 Price]),
            "2021", SUM('Table1'[2021 Price])
        ),
        'Table1'[City] = "New York"
    ),
    "Chicago", CALCULATE(
        SWITCH(
            [Year],
            "2020", SUM('Table1'[2020 Price]),
            "2021", SUM('Table1'[2021 Price])
        ),
        'Table1'[City] = "Chicago"
    )
)

注意:如果你的原始数据中每个ID对应每个城市只有1条记录,SUM可以换成MAX/MIN不影响结果。

内容的提问来源于stack exchange,提问作者Alexis Mercado

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:07