今日たまたま書いたので、残しておきます。
Power Queryのレコード(record)とは
名前でアクセスできる配列です。個人的には多用しています。
Power Queryにおいては、下図のようにして定義できます。
フィールド値の取り方
//簡単な記法。
= [a=10,b=2,c=5][b] //=2
//関数に入れれば、テキストで指定できる。
= Record.Field( [a=10,b=2,c=5],"a") //=10
やりたいこと
フィールド間の計算を直接やってくれる関数はありませんので、自分で書くしかないわけです。
今回は、2つのレコードの差を取ってみます。
コード
色々やり方はあると思いますが、素直にフィールド名で値を取っていきます。
ちなみに、フィールドに適用する関数をfx
として抜き出してありますので、ここをいじったり、引数に組み込んでやれば、引き算以外もできます。
fx_レコード差分
(x as record,y as record) as record=>
let
FieldNames = Record.FieldNames(x),
fx = (a,b)=> a-b,
//FieldNamesの値を1個ずつ使って計算。アンダーバーの箇所に中身が入ります。
calculation =List.Transform(
FieldNames,
each fx(Record.Field(x,_),Record.Field(y,_))
),
Result =Record.FromList(calculation,FieldNames)
in
Result
適用例
出来上がりのフィールド順序は、1個目の引数に入れたレコードの順番に合わせています。値自体はどちらのレコードも同じなので、差は0になっていますね。
実用的には、レコード列をそのまま計算するのに使えます。この例ではdata
列はその日の値、data0
は前日の値を格納してあり、その差分の計算結果をレコードとして列追加しています。
ここまでくれば、あとはレコード展開などもできます。
※データは架空のものです。