powerquery - Powerquery,在示例中需要访问行时,可以创建参数化函数吗?
问题描述
是否可以在 PowerQuery 中创建一个这样开头的函数,
(Table as table, transformOperations as list) as table =>
这将允许您执行此类操作
Table.FromRecords(
Table.TransformRows(
Table1,
(r) =>
Record.TransformFields(
r,
{
{ "A", each if r[Column B] = "1" then "Z" else _ },
{ "B", each if r[Column C] = "1" then "Z" else _ }
}
)
)
)
但是......将能够接受字段转换操作的最终列表,并且仍然能够读取该行中的其他字段?基本上我试图消除对r
变量的需求。
解决方案
重要的是要记住这each ... _
是“语法糖”,只是另一种写作方式(_) => ... _
。即,变量名是_
.
所以我们可以重写你M
的
Table.FromRecords(
Table.TransformRows(
Table1,
(r) =>
Record.TransformFields(
r,
{
{ "A", (_) => if r[Column B] = "1" then "Z" else _ },
{ "B", (_) => if r[Column C] = "1" then "Z" else _ }
}
)
)
)
如果您没有r
作为单独的变量名,那么如果您尝试访问[Column B]
,那么它认为您正在引用,因为它是一个特定字段而不是作为字段之一的记录_[Column B]
,所以它不存在。_
这里的困难在于您拥有的转换列表取决于来自其他字段的值,因此它不是独立的。
你可以做的是分解这样的功能:
let
ApplyTransform = (Table as table, rowTransform as function) as table =>
Table.FromRecords(Table.TransformRows(Table, rowTransform))
in
ApplyTransform
let
rowTransform = (Row as record) as record =>
Record.TransformFields(
Row,
{
{ "A", each if Row[Column B] = "1" then "Z" else _ },
{ "B", each if Row[Column C] = "1" then "Z" else _ }
}
)
in
rowTransform
然后你可以像ApplyTransform(Table1, rowTransform)
.
推荐阅读
- ecmascript-6 - 在宿主环境中操作计算对象(ECMAScript 文档定义)
- php - PHP 没有在 Ubuntu 服务器上重定向
- python - Python:删除/复制文件。第一次运行成功,现在没有
- javascript - 根据数量更新价格 HTML, JS
- python - (NMF) 每次调用方法时,在 NMF 中计算一致性会产生不同的输出
- python - Python Discord Music Bot - 创建队列 - 自动播放下一首歌曲
- stripe-payments - Stripe Payment Intent:更新并确认付款金额的变化
- typescript - 使用 typescript 编译 d3 示例时出错
- php - Laravel 中不缓存追加
- flutter - 更改底部导航栏图标的活动颜色