適材適所

システム屋のくらげが気ままに書いているブログです。PowerShellやVBAなどプログラミング系の話をメインに書いています。

MENU

【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式を見てもなんとなく理解できる・・・はず・・・です。リストと同様、カッコの意味をひとつずつ整理していけば、理解されることと思います。

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