Power Query M式言語の構造データ型の1つであるテーブルについて解説する記事です。
環境
Windows10
Excel 2019
テーブルとは?
M式の中の構造化データ型の1つで、名前付きの列と行によって構成される値の集まりです。
文字で書くと取っつきにくいですが、データベースのテーブルや、Excelのテーブルをイメージして頂くとわかりやすいかも知れません。
テーブルには列があり、それぞれの列には型があります。
型は、明示的に指定することもできますし、お任せで設定してもらうこともできます。
M式言語でテーブルを作成するときは、型を明示するか、暗黙の型を使うかで
構文が若干変わってきます。
それぞれの構文は次の通りとなっています。
暗黙的な型解決をする場合(お任せ)の構文
お任せで型を解決してもらう場合は、型も、値も{}で囲まれたリスト型で指定します。
#table( {型のリスト}, { {値のリスト}, {値のリスト}, ・・・ {値のリスト} } )
明示的に型を指定する場合の構文
明示的に型を指定する場合は、お任せの場合と異なり、列名は[]で囲まれたレコード型で記述します。
#table( type table [列名=型,列名=型・・・], { {値のリスト}, {値のリスト}, ・・・ {値のリスト} } )
テーブルの例
テーブルの例を見てみましょう。
型をお任せの場合
型を自動で決めてもらう場合の例です。
idとnameはどちらもテキスト型になりました。
#table( {"id","name"}, { {1,"Ken"}, {2,"Ryu"} } )
型を明示的に指定する場合
型を明示的に指定してテーブルを作成する場合です。
ここではidを数字型、nameをテキスト型に指定してみました。
#table( type table[id=number,name=text], { {1,"Ken"}, {2,"Ryu"} } )
テーブルからインデックス位置で行を取得する
テーブルから位置指定で行を取得するときは、{}で取得したい行番号を指定します。行番号は0から始まる数字です。
let t=#table( type table[id=number,name=text], { {1,"Ken"}, {2,"Ryu"} } ) in t{0}
テーブルに関する関数
テーブルに関する関数を使うことでテーぶりをより便利に使うことができます。
テーブルに特定の行が含まれているか調べる
テーブルに特定の行が含まれているか調べるときは、Table.Contains関数を使います。
let t=#table( type table[id=number,name=text], { {1,"Ken"}, {2,"Ryu"} } ), contain= Table.Contains(t,[name="Ken"]) in contain
特定のレコードを抽出する
特定のレコードを抽出したい場合は、Table.SelectRows関数を使います。
let t=#table( type table[id=number,name=text], { {1,"Ken"}, {2,"Ryu"} } ), selected= Table.SelectRows(t,each [name]="Ryu") in selected
テーブルの行数を調べる
テーブルの行数を調べるときは、Table.RowCount関数を使用します。
let t=#table( type table[id=number,name=text], { {1,"Ken"}, {2,"Ryu"} } ), count= Table.RowCount(t) in count
テーブルを並び替える
テーブルを並び替えるときは、Table.Sort関数を使います。
let t=#table( type table[id=number,name=text], { {1,"Ken"}, {2,"Ryu"} } ), sorted= Table.Sort(t,{"id",Order.Descending}) in sorted
テーブルで使える関数は他にもたくさんあります。詳しくは、テーブル関数 - PowerQuery M | Microsoft Docs をご覧頂ければ幸いです。
終わりに
Power Query M式言語の構造型のデータ型の1つであるテーブルについて説明しました。
テーブルは同じく構造型のデータ型のリストやレコードと比べると、構文がややこしいところがあります。しかし基本に立ち返ってひとつずつ見ていけばその中身は意外と簡単です。
と言ってもなかなか一からテーブルを作るよりは、Excelやcsvファイル等の他のデータを使うことが大半かも知れませんが・・・。大事なのは知っていることです、きっと!
というわけで、ここまでお読みいただき、ありがとうございました。