在我們日常操作中徙垫,經(jīng)常會碰到什么時候要用each,什么是要用_宅静,甚至什么時候用(a)=>。
我們先來解釋下這幾個的意思站欺。
each:從字面意義來講就是每一個的意思姨夹,表達的內容也和字面意義一樣。
_:代表當前行矾策,既可以代表當前表的當前行磷账,也可以代表指定列的當前行。如果指表的每一行也就是記錄(Record)贾虽,如果代表列的每一行也就是值(Value)逃糟。(直接代表只限當前表)
(a)=>:代表的是一個函數(shù)引用,可以替代指定的列表等引用蓬豁。
我們來看幾個案例绰咽。
數(shù)據(jù)源:
代表當前表的當前行_,實際上就是一個Record
代表當前行的指定列_,實際上就是一個值
each的出現(xiàn)基本上伴隨著列和表的計算(最終顯示結果為列或者表地粪,List.Average這類最終結果是值的排除在外)取募,例如添加列的時候就會自動添加一個each。
使用List.Average之類的函數(shù)蟆技,因為最終返回的是值玩敏,所以也就不存在each的使用斗忌。
判斷當前成績是否大于平均成績=_[成績]>List.Average(源[成績])
選擇大于等于平均數(shù)的值作為列表,則需要使用each旺聚,因為返回的結果是list格式织阳。
=List.Select(源[成績],?each _>=List.Average(源[成績]))
=List.Select(源[成績],?(a)=>a>=List.Average(源[成績]))
其中的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+[成績])
我們再來看一個稍微復雜點的圣拄,返回姓名+總分的列表
=List.Transform(源[姓名],?(a)=>a?& Text.From( List.Sum( 源[成績] ) ) )
我們要返回的是一個list嘴秸,同時需要進行運算,所以需要用自定義函數(shù)作為一個參數(shù)進行運算庇谆,使用到的就是(a)=>岳掐,代表的是源[姓名],List.Sum進行求和饭耳,出來的是一個數(shù)值串述,我們還需要進一步用Text.From進行轉換成文本格式,最終2個文本格式進行合并寞肖。代表列的源[姓名]和代表值的文本通過&進行合并纲酗。
我們可以發(fā)現(xiàn)用自定義函數(shù)可以替代each_進行列和數(shù)值進行對比。在自定義中可以使用任何的變量參數(shù)進行使用新蟆,不限于a觅赊。
另外我們還可以換個角度來辨別,如果存在2個變動的值進行計算或者比較琼稻,就必須使用自定義函數(shù)參數(shù)來進行分類吮螺,要不然無法區(qū)分對應的到底是哪一行。
對于這塊的知識還是需要反復用實例來熟悉掌握帕翻。
有時候大家對于變量的指示不是很明確鸠补,如果直接使用代表的數(shù)據(jù)就可以更加容易辨別。當然前提是必須是一個變量值嘀掸,不能有[]等符號紫岩。