ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 498|回复: 7

[求助] 有图,PowerQuery中[]优先级极高,且(x)=> [x]方括号里的x不再是变量,请帮解释

[复制链接]

TA的精华主题

TA的得分主题

发表于 2022-10-25 02:34 | 显示全部楼层 |阅读模式
本帖最后由 果子麦子 于 2022-10-25 09:18 编辑

引用顺序.jpg 引用顺序2.jpg 如图所示,圈3的a,不加方括号就自动引用了就近的a的值11,不会报错,加上方括号就自动深化到较远的那个等于1的a,这个是什么原理啊,怎么忽远忽近,大神能给个解释么,万谢!!

代码:= List.Transform({[a=1,b=2]},each [a=[a]+10,b=a])

TA的精华主题

TA的得分主题

发表于 2022-10-25 08:54 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
[]里面不能是变量,只能算是字符串

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-10-25 10:18 | 显示全部楼层
luzwales 发表于 2022-10-25 08:54
[]里面不能是变量,只能算是字符串

好像是这么回事。

TA的精华主题

TA的得分主题

发表于 2022-10-25 12:41 | 显示全部楼层
你写的计算等价于
  1. = List.Transform({[a=1,b=2]},each [a= _[a] +10, b=a])
复制代码


甚至也等价于
  1. = List.Transform({[a=1,b=2]},each [b=a, a= _[a] +10])
复制代码


你所提到的[a]实际是each函数中_[a]的简略写法,在这里也就是[a=1, b=2][a];而单纯的a则是[a= _[a] +10, b=a]这个record里,作为“key”(PQ里的record被定义为“key-value对的集合”,类似很多编程语言中的“字典”)的a所对应的value。

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-10-25 12:44 | 显示全部楼层
不加[]的a是each 内部的那个Record的数据,加上[]后,是each外的Record[a=1,b=2]的数据,上下文的原因吧。[]内的是字段名,不是数学上的中括号,跟优先级没关系(个人理解,仅供参考)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2022-10-25 13:00 | 显示全部楼层
甚至还可以写成
  1. = List.Transform({[a=1,b=2]},each [b=a, a= Record.Field(_, "a") +10])
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-25 14:09 | 显示全部楼层
本帖最后由 果子麦子 于 2022-10-25 14:22 编辑
消灭零公里 发表于 2022-10-25 12:44
不加[]的a是each 内部的那个Record的数据,加上[]后,是each外的Record[a=1,b=2]的数据,上下文的原因吧。[ ...
  1. let
  2.     a=11,
  3.     f=[a=1,b=a]
  4. in
  5.     f[b]
复制代码
感谢回复,我的意思是类似上面的代码,f的结果是1,应该由于b所处的环境在f中,所以就近原则,b等于当前环境中的a=1,在=List. Transform({[a=1,b=2]}, each [a=[a]+10,b=[a]])这里的最后这个a如果按上面的理解,b=[a]应该是b[11]导致引用不到的错误,但实际上[a]是一个整体,不再是a这个变量了,是[a=1,b=a]这个记录的深化,另外还有个问题,上面的,each [a=[a]+10,b=a],写成[a]就自动和each组合变成each _[a],写成a就不会自动变成each _a导致错误,这个是程序自动识别的么,也是因为就近原则所以直接引用a而不是_a是么

TA的精华主题

TA的得分主题

 楼主| 发表于 2022-10-25 14:31 | 显示全部楼层

感谢回复,就是这里= List.Transform({[a=1,b=2]},each [a= [a] +10, b=a]),其中each [a= [a] +10, b=a]部分,写成[a]就会自动变成each _[a],写成a为什么没有自动变成each _a呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 16:00 , Processed in 0.045622 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表