优化Power Query删除空列M代码:提升大表处理速度
优化Power Query删除全空列的速度
原代码性能低下的核心问题是每处理一列就重新读取一次整张表的数据,叠加List.NonNullCount逐行扫描列内所有值的操作,在大表多列场景下会产生指数级的性能开销。
快速优化方案(用Table.Profile)
通过Table.Profile一次性完成所有列的非空值统计,仅需遍历整张表一次,大幅减少重复计算:
// 移除全空列 ColumnProfile = Table.Profile(#"Expanded"), ColumnsToKeep = Table.SelectRows(ColumnProfile, each [NonNullCount] > 0)[Column], RemoveEmptyColumns = Table.SelectColumns(#"Expanded", ColumnsToKeep)
更轻量的替代方案(用Table.ColumnStatistics)
如果你的Power Query版本支持Table.ColumnStatistics(主流新版本均支持),它返回的统计信息更精简,性能表现可能更优:
// 移除全空列 ColumnStats = Table.ColumnStatistics(#"Expanded"), ColumnsToKeep = Table.SelectRows(ColumnStats, each [NonNullCount] > 0)[ColumnName], RemoveEmptyColumns = Table.SelectColumns(#"Expanded", ColumnsToKeep)
性能差异对比
- 原代码逻辑:对N列执行N次全表扫描,总扫描次数 = 列数 × 行数
- 优化后逻辑:仅执行1次全表扫描,一次性完成所有列的统计,总扫描次数 = 行数
内容的提问来源于stack exchange,提问作者Rafadan
相关产品推荐
相关产品推荐

