Power Query中Table.Group用动态列分组时如何指定列类型避免重置
Power Query Table.Group 分组保留原列类型的实现方案
核心实现代码
// 先获取源表结构,构建列名->类型的映射记录 schema = Table.Schema(#"Pivoted Column"), columnTypeMapping = Record.FromList(schema[TypeName], schema[Name]), // 生成带类型定义的聚合参数列表 groupAggConfig = List.Transform(columnList2, (colName) => { colName, (grp) => List.Max(Table.Column(grp, colName)), Record.Field(columnTypeMapping, colName) } ), // 执行分组,生成的列会自动继承原表对应列的类型 ttKeepColumnTypes = Table.Group(#"Pivoted Column", {"Index"}, groupAggConfig)
可选优化:异常兼容处理
如果你的columnList2中可能存在源表没有的列,可以加判断避免取值报错,调整List.Transform逻辑如下:
groupAggConfig = List.Transform(columnList2, (colName) => let targetType = if Record.HasFields(columnTypeMapping, colName) then Record.Field(columnTypeMapping, colName) else type any in { colName, (grp) => List.Max(Table.Column(grp, colName)), targetType } )
逻辑说明
Table.Schema返回的TypeName字段原生符合Table.Group聚合参数的列类型定义要求,无需额外格式转换- 原列的可空属性、基础类型(日期、数值、文本等)都会完整继承,和手动写固定列类型的效果完全一致
内容的提问来源于stack exchange,提问作者Anonymous Explorer
相关产品推荐
相关产品推荐

