大家在之前的案例中,会看到很多用到each和_的地方。它们虽然出现得很频繁,但是不容易理解。造成这个问题的原因之一是我们大多数接触它们时,还没了解过自定义函数。当我们学习了自定义函数的语法 ()=> 后,学习 each 和 _ 就会变得简单。它们其实就是自定义函数的语法糖,它们是固定组合,目的是让 M 语言友好并且更接近自然语言。我们以自定义函数加 2 为例,(x) => x+2,这里的 x 只是用户自主选择的一个字母,它还可以是其他任意字符,包括下划线 _。所以自定义函数加 2 也可以写成 (_) => _ +2,下划线和其他字母在充当参数时的写法、功能是一样的,但它多了一层特殊性。因此 Power Query 团队选择了它进行简化,并将写法固定下来成了语法格式。它的简化写法是:each _ +2。
(x)=>x+2;//普通自定义函数
(r)=>r+2;//可以选择任意字符,如字母、中文及其他字符。不能是M语言的关键字或已经定义的对象名称
(_)=>_+2;//可以选择任意字符,如字母、中文及其他字符。不能是M语言的关键字或已经定义的对象名称
each _ +2.// 自定义函数的作用就是对每一个(each)元素进行相应的处理
如果参数是表、记录等可进一步深化的结构化数据,以上语句还可以进行简化。比如,在筛选表列时用到的 M 表达式就是标准格式,_ 也可以省略。
筛选的行 = Table.SelectRows(名单, each [年龄] > 30) //最简单的写法,贴近自然语言。使用列筛选器时自动生成的标准格式
筛选的行 = Table.SelectRows(名单,each _ [年龄]> 30) //最安全的写法,也很容易理解。在不同语境引用同一列时建议使用这个格式
筛选的行 = Table.SelectRows(名单,(x)=>x [年龄]>30)
筛选的行 = Table.SelectRows(名单,(x)=>Record.Field(x,"年龄")>30)
//以上两个都是使用自定义函数的完整格式,是each的原始格式。
好了,今天内容就这些。