Power BI Power Query:如何处理透视操作导致的列名动态变化问题
解决方案
你只需要把硬编码的列名列表替换为动态生成的列名列表即可,不需要写死具体的月份数值,有两种常用实现方式:
方式1:排除固定列法
你表中只有Part#是固定的非月份字段,直接提取除该字段外的所有列作为操作对象即可:
// 先获取透视后所有列名,剔除固定列Part#得到动态月份列列表 DynamicMonthCols = List.RemoveItems(Table.ColumnNames(#"Pivoted Column"), {"Part#"}), // 替换空值为0,直接传入动态列列表 ReplaceNullStep = Table.ReplaceValue(#"Pivoted Column", null, 0, Replacer.ReplaceValue, DynamicMonthCols)
该方法适合后续没有新增其他非月份固定列的场景,代码最简单。
方式2:按列名特征筛选法
如果后续你会新增最大值、汇总值等非月份列,你可以根据月份列都是数字的特征筛选列:
// 筛选所有列名是数字的列,即为动态月份列 DynamicMonthCols = List.Select(Table.ColumnNames(#"Pivoted Column"), each Value.Is(Value.FromText(_), type number)), ReplaceNullStep = Table.ReplaceValue(#"Pivoted Column", null, 0, Replacer.ReplaceValue, DynamicMonthCols)
如果后续你对月份列重命名为类似「2024-01」「1月」这类格式,只要修改筛选逻辑匹配列名规则即可,比如重命名为带「月」的格式后,筛选逻辑可以改为each Text.EndsWith(_, "月")。
后续你对月份列做批量重命名、批量计算差值等操作,都可以复用这个动态生成的列列表,完全不需要调整硬编码内容。
内容的提问来源于stack exchange,提问作者Wadser
相关产品推荐
相关产品推荐

