Excel Power Query条件转换多列记录语法报错问题排查
Power Query条件修改多列数据报错问题
经过多次尝试解决部分报错,目前卡在条件修改多列数据的环节:无条件执行时代码正常,添加条件后触发类型错误。
无报错的无条件执行代码
#"Adjustment" = Table.FromRecords(Table.TransformRows(#"NewClmns", (r) => Record.TransformFields(r, List.Transform(DateRange, (c) => {c, each _ * #"DownrateFactor"} ) ) )),
带条件的报错代码
执行以下代码时提示错误:value of type "TransformOperations" expected
#"Adjustment" = Table.FromRecords(Table.TransformRows(#"NewClmns", (r) => Record.TransformFields(r, if r[#"Programname.2"] = "Qualified" then List.Transform( DateRange, (c) => {c, each _ * 0.9}) else Record.ToList(r) ) )),
此前已将else r改为else Record.ToList(r)(因为r是记录而非列表),但问题仍未解决。
示例数据
输入
| Programmname.2 | 01012024 | 01022024 | 01032024 | 01042024 |
|---|---|---|---|---|
| abc | 1 | 1 | 1 | 1 |
| Qualified | 1 | 1 | 1 | 1 |
| abc | 1 | 1 | 1 | 1 |
期望输出
| Programmname.2 | 01012024 | 01022024 | 01032024 | 01042024 |
|---|---|---|---|---|
| abc | 1 | 1 | 1 | 1 |
| Qualified | 0.9 | 0.9 | 0.9 | 0.9 |
| abc | 1 | 1 | 1 | 1 |
DateRange定义
#"DateRange" = List.RemoveFirstN(Table.ColumnNames(#"PrevStep"),1),
解决方案
报错原因是Record.TransformFields的第二个参数要求是TransformOperations类型的列表(即每个元素为{字段名, 转换函数}的格式),而原else分支返回的Record.ToList(r)是字段值列表,不符合参数类型要求。
正确的写法是在else分支返回空列表,表示不修改任何字段,Record.TransformFields会直接返回原记录:
#"Adjustment" = Table.FromRecords(Table.TransformRows(#"NewClmns", (r) => Record.TransformFields(r, if r[#"Programname.2"] = "Qualified" then List.Transform(DateRange, (c) => {c, each _ * 0.9}) else {} // 空列表表示不执行任何字段修改 ) ))
若要明确保留原字段值,也可以返回对DateRange字段不做修改的操作列表,效果一致:
#"Adjustment" = Table.FromRecords(Table.TransformRows(#"NewClmns", (r) => Record.TransformFields(r, if r[#"Programname.2"] = "Qualified" then List.Transform(DateRange, (c) => {c, each _ * 0.9}) else List.Transform(DateRange, (c) => {c, each _}) ) ))
内容的提问来源于stack exchange,提问作者w461
相关产品推荐
相关产品推荐

