はじめに
#sharedとは
#sharedは、Power Queryのワークブック内に存在するすべてのクエリ、パラメータ、関数を取得できる特殊な識別子です。通常は直接使用することは少ないですが、パラメータ一覧の作成やクエリの動的な参照など、高度な処理を実現する際に役立ちます。
この記事で分かること
- Power Queryの基本構造とデータ型
-
#sharedの使い方と取得できる内容 - パラメータ一覧テーブルの作成方法
- 実用的な活用例
Power Queryの基本構造
クエリとは
クエリは、Power Queryにおけるデータ変換処理の単位です。データソースから取得したデータに対して、フィルタリング、結合、集計などの処理を定義します。
Power Query エディタの左側ペインに表示される各項目がクエリです。クエリは最終的にテーブル、値、リストなどのデータを返します。
パラメータとクエリの違い
パラメータは特殊なクエリの一種で、単一の値を保持します。
通常のクエリ
- テーブルやリストなど、複数のデータを返す
- データ変換の結果を格納
パラメータ
- 単一の値のみを保持
- 他のクエリから参照され、フィルタ条件や計算に使用される
- M言語では
meta [IsParameterQuery=true]で定義
// パラメータの例
#date(1999, 1, 1) meta [IsParameterQuery=true, Type="Date", IsParameterQueryRequired=true]
M言語の基本
Power QueryのクエリはM言語で記述されます。M言語は関数型プログラミング言語で、各ステップが前のステップの結果を受け取って処理を進めます。
基本的な構文は以下の通りです。
let
ステップ1 = 処理内容,
ステップ2 = ステップ1を使った処理,
最終結果 = ステップ2を使った処理
in
最終結果
データ型の理解
#sharedを理解するには、レコード型とテーブル型の違いを知っておく必要があります。
レコード型とは
レコード型は、名前と値のペアの集合です。他のプログラミング言語でいう辞書やオブジェクトに相当します。
[ 名前 = "田中", 年齢 = 30, 部署 = "営業" ]
レコード内の値にアクセスするには、レコード[フィールド名]またはレコード[名前]の形式を使います。
テーブル型とは
テーブル型は、行と列で構成されるデータ構造です。Power Queryで最も頻繁に扱うデータ型です。
各列には名前があり、各行は同じ構造のデータを持ちます。
Record.ToTableによる変換
Record.ToTable関数は、レコード型をテーブル型に変換します。変換後のテーブルは以下の2列構造になります。
- Name列:レコードのフィールド名
- Value列:そのフィールドの値
#sharedの使い方
基本的な使用方法
新しい空のクエリを作成し、以下のコードを入力します。
= #shared
これだけで、ワークブック内のすべてのクエリ、パラメータ、関数がレコード形式で取得されます。
取得できる内容
#sharedで取得できるのは以下の項目です。
- ユーザーが作成したクエリ:データテーブルを返すクエリ
- パラメータ:単一の値を持つクエリ
- カスタム関数:ユーザーが定義した関数
- Power Query標準の関数:Table.SelectRows、List.Sumなど
実際の出力例
#sharedをそのまま実行すると、レコード形式で表示されます。実用的にはRecord.ToTableでテーブルに変換すると見やすくなります。
let
全項目 = Record.ToTable(#shared)
in
全項目
実行結果のイメージ:
| Name | Value |
|---|---|
| param1 | "AAA" |
| param2 | 1999/01/01 |
| period | Table |
| Table.SelectRows | Function |
| ... | ... |
注意点と制限事項
メタデータの取得について
#sharedでは、パラメータの値は取得できますが、メタデータ(Type、IsParameterQueryRequiredなど)を直接取得する方法は限られています。
パラメータの型や必須/任意の情報を一覧化したい場合は、手動でテーブルを作成する方が確実です。
パフォーマンスへの影響
#sharedは全項目を取得するため、大規模なワークブックでは処理に時間がかかる可能性があります。実用上は、必要な項目のみをフィルタリングして使用しましょう。
また、#sharedを使ったクエリは、他のクエリが更新されるたびに再評価される可能性があります。パラメータ一覧のように参照用途で使う場合は、更新頻度を考慮してください。
まとめ
#sharedは、Power Queryのワークブック内のすべてのクエリ、パラメータ、関数を取得できる便利な機能です。
主な用途
- パラメータ一覧の自動作成
- クエリの動的な参照
- ワークブック構造の分析
活用のポイント
-
Record.ToTableでテーブルに変換すると扱いやすい - フィルタリングで必要な項目のみを抽出
- メタデータは手動管理の方が確実
パラメータが多い場合や、レポート上でパラメータ設定を確認したい場合に、#sharedを活用してみてください。