適材適所

WindowsやPowerShellやネットワーク、IBMなどのシステム系の話など気になったことも載せているブログです。

【Power Query M式言語】レコードについての解説

Power Query M式言語の構造データ型の1つであるレコードについて解説する記事です。

環境

Windows10
Excel 2019

レコードとは?

データ構造の一つで、名前(キー)と値のペアで保持されるデータで、名前(キー)を指定することで値を取得することができるデータ構造のことです。

世にいうハッシュテーブルというやつです。

M式言語では[]で囲み、次のように書きます。

[名前1=値1,名前2=値2,名前3=値3]

レコードの例

レコードの例を見てみましょう。

単純なレコード

一番単純なレコードの例です。

 
let
   kenRecord=[id=1,name="ken"]
in
   kenRecord

f:id:shinmai_papa:20210919221702p:plain

名前(キー)を使ったアクセス

レコードで名前(キー)を使って値を取得するには[]を使います。

 
let
   kenRecord=[id=1,name="ken"]
in
   kenRecord[name]

f:id:shinmai_papa:20210919221706p:plain

名前(キー)に空白がある場合

名前(キー)に空白がある場合は、#"〇〇 〇〇"と書きます。

 
let
   kenRecord=[id=1,name="ken",#"birth day"=Date.FromText("2000/1/2")]
in
   kenRecord

f:id:shinmai_papa:20210919221712p:plain

レコードに関する関数

Record関数を使うことで、レコードを便利に使うことができます。

新しいフィールドを追加する

レコードに新しいフィールド(名前と値のペア)を追加するときはRecord.AddField関数を使います。

 
let
   kenRecord=[id=1,name="ken"]
in
   Record.AddField(kenRecord,"age",23)

f:id:shinmai_papa:20210919222038p:plain

レコードの名前(キー)一覧を取得する

レコードの名前(キー)一覧を取得するときはRecord.FieldNames関数を使います。

 
let
   kenRecord=[id=1,name="ken"]
in
   Record.FieldNames(kenRecord)

f:id:shinmai_papa:20210919221717p:plain

特定の名前(キー)が含まれているか調べる

レコードに特定の名前(キー)が含まれているか調べたいときは、Record.HasFields関数を使います。

 
let
   kenRecord=[id=1,name="ken"]
in
   Record.HasFields(kenRecord,"id")

f:id:shinmai_papa:20210919221723p:plain

他にも様々なRecord関数があります。詳しくはレコード関数 - PowerQuery M | Microsoft Docs に一覧が載っていますので、眺めてみると面白い発見があること請け合いです。

終わりに

Power Query M式言語のレコードについて解説してみました。

レコードは[]で囲まれているところがキモです。対してリストは{}で囲まれています。この2つの違いをきっちり理解しておくと、自動的に生成されるM式を見てもなんとなく理解できる・・・はず・・・です。リストと同様、カッコの意味をひとつずつ整理していけば、理解されることと思います。

というわけで、ここまでお読みいただき、ありがとうございました。