📝

Power BI 上で静的テーブルを作成する方法

2023/03/02に公開

背景

Power BI を構築する上で、ちょっとしたテーブルを作成したいことがある。
CSVファイルを作成するくらいなら、Power BI 上で直接作れないかと思って調べてみました。

まず、今回作成するテーブルは、静的テーブルや内部テーブルと呼ばれる(おそらく)種類のテーブルで、DAX や M言語で作成が可能です。

  • DAX : Power BI を起動時やビジュアルの操作時に処理される。
  • M言語 : Power Query 上で記述する言語で、データセットの更新時に処理される。

どの言語で作成するかによって、どのタイミングで処理負荷がかかるかという違いがある。

調べた結果、主に4種類の方法がありそうなので紹介します。

作成手法

#table in Power Query

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