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
相关产品推荐
相关产品推荐

