Power Query引用中的each,_,(a)=>的使用

在我们日常操作中,经常会碰到什么时候要用each,什么是要用_,甚至什么时候用(a)=>。

我们先来解释下这几个的意思。

each:从字面意义来讲就是每一个的意思,表达的内容也和字面意义一样。

_:代表当前行,既可以代表当前表的当前行,也可以代表指定列的当前行。如果指表的每一行也就是记录(Record),如果代表列的每一行也就是值(Value)。(直接代表只限当前表

(a)=>:代表的是一个函数引用,可以替代指定的列表等引用。

我们来看几个案例。

数据源:

Power Query引用中的each,_,(a)=>的使用_第1张图片

代表当前表的当前行_,实际上就是一个Record

Power Query引用中的each,_,(a)=>的使用_第2张图片
Power Query引用中的each,_,(a)=>的使用_第3张图片

代表当前行的指定列_,实际上就是一个值

Power Query引用中的each,_,(a)=>的使用_第4张图片
Power Query引用中的each,_,(a)=>的使用_第5张图片

each的出现基本上伴随着列和表的计算最终显示结果为列或者表,List.Average这类最终结果是值的排除在外),例如添加列的时候就会自动添加一个each。

使用List.Average之类的函数,因为最终返回的是值,所以也就不存在each的使用。

判断当前成绩是否大于平均成绩=_[成绩]>List.Average(源[成绩])

Power Query引用中的each,_,(a)=>的使用_第6张图片

选择大于等于平均数的值作为列表,则需要使用each,因为返回的结果是list格式。

=List.Select(源[成绩]each _>=List.Average(源[成绩]))

=List.Select(源[成绩](a)=>a>=List.Average(源[成绩]))

Power Query引用中的each,_,(a)=>的使用_第7张图片

其中的each _代表的是前面源[成绩]这一列的每一行的值(因为list格式只有一行,所以返回的就是其每一个值)。

同理,a代表的也是前面源[成绩]这一列的值

返回Table格式时候使用each。

例如:我们需要选择成绩=100的列表。有时候代表当前字段值的时候,前面的这个_可以省略。

_[成绩]=[成绩]=值

=Table.SelectRows(源,each _[成绩]=100)

=Table.SelectRows(源,each[成绩]=100)

=Table.SelectRows(源,(a)=>a[成绩]=100)

=Table.SelectRows(源,(源)=>源[成绩]=100)

(a)代表的就是源,(源)直接作为变量和(a)意思一样

返回成绩列表每个值+当前成绩列表的行值。

=List.Transform(

源[成绩],(a)=>a+[成绩])

Power Query引用中的each,_,(a)=>的使用_第8张图片

我们再来看一个稍微复杂点的,返回姓名+总分的列表

=List.Transform(源[姓名], (a)=>a & Text.From( List.Sum( 源[成绩] ) ) )

我们要返回的是一个list,同时需要进行运算,所以需要用自定义函数作为一个参数进行运算,使用到的就是(a)=>,代表的是源[姓名]List.Sum进行求和,出来的是一个数值,我们还需要进一步用Text.From进行转换成文本格式,最终2个文本格式进行合并。代表列的源[姓名]和代表值的文本通过&进行合并。

Power Query引用中的each,_,(a)=>的使用_第9张图片

我们可以发现用自定义函数可以替代each_进行列和数值进行对比。在自定义中可以使用任何的变量参数进行使用,不限于a。

另外我们还可以换个角度来辨别,如果存在2个变动的值进行计算或者比较,就必须使用自定义函数参数来进行分类,要不然无法区分对应的到底是哪一行。

对于这块的知识还是需要反复用实例来熟悉掌握。

有时候大家对于变量的指示不是很明确,如果直接使用代表的数据就可以更加容易辨别。当然前提是必须是一个变量值,不能有[]等符号。

你可能感兴趣的:(Power Query引用中的each,_,(a)=>的使用)