🌟
Power BI 上で静的テーブルを作成する方法
背景
Power BI を構築する上で、ちょっとしたテーブルを作成したいことがある。
CSVファイルを作成するくらいなら、Power BI 上で直接作れないかと思って調べてみました。
まず、今回作成するテーブルは、静的テーブルや内部テーブルと呼ばれる(おそらく)種類のテーブルで、DAX や M言語で作成が可能です。
- DAX : Power BI を起動時やビジュアルの操作時に処理される。
- M言語 : Power Query 上で記述する言語で、データセットの更新時に処理される。
どの言語で作成するかによって、どのタイミングで処理負荷がかかるかという違いがある。
調べた結果、主に4種類の方法がありそうなので紹介します。
作成手法
#table in Power Query
- 言語:M言語
- Improve Efficiency with Static Data Tables in Power Query, Power Pivot and Power BIの動画作成者は、#tableをよく使用するらしい。
input
let
ソース = #table(type table [index = Int64.Type, 日区分 = text], {{1, "平日"}, {2, "祝休日"}})
in
ソース
output
index | 日区分 |
---|---|
1 | 平日 |
2 | 祝休日 |
Power BI - データの入力
- 言語:M言語
- Power BI 上の「データの入力」機能で作成できる。
- Power Query の詳細エディタを開くと、テーブルがエンコードされた文字列で保存されているのが確認できる。
input
let
ソース = Table.FromRows(
Json.Document(
Binary.Decompress(
Binary.FromText("i45WMlTSUXq6c/Oz6UuVYnWilYyA3OdL5z7ZMxEsEgsA", BinaryEncoding.Base64),
Compression.Deflate
)
),
let
_t = ((type nullable text) meta [Serialized.Text = true])
in
type table [index = _t, 日区分 = _t]
),
変更された型 = Table.TransformColumnTypes(ソース, {{"index", Int64.Type}, {"日区分", type text}})
in
変更された型
output
index | 日区分 |
---|---|
1 | 平日 |
2 | 祝休日 |
DAX Table Constructor
- 言語:DAX
- テーブル コンストラクター - DAX | Microsoft Docs
- 任意のスカラー式を入力値として使用できます。
- テーブル コンストラクターは、特定のメタデータを設定せずにデータ テーブルを簡単かつ迅速に作成する方法です。
input
DAX Table Constructor =
{
(1,"平日"),
(2,"祝休日")
}
output
Value1 | Value2 |
---|---|
1 | 平日 |
2 | 祝休日 |
DATATABLE Function in DAX
- 言語:DAX
- DATATABLE 関数 - DAX | Microsoft Docs
- 値では、即時式の外側のものが参照されない場合があり、列、テーブル、リレーションシップなどを参照することはできません。
- この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。
- DAX を使用して Power BI でテーブルを作成するには、さまざまな方法があります。Datatable 関数を使用すると、各列名とデータ型を具体的に定義する柔軟性が得られます。
input
DATATABLE Function in DAX =
DATATABLE("index",INTEGER,"日区分",STRING,
{
{1,"平日"},
{2,"休日"}
}
)
output
index | 日区分 |
---|---|
1 | 平日 |
2 | 祝休日 |
まとめ
インポート時に、処理される M言語で記載する #table in Power Query 押しです。
Discussion