Power BI のデータセットを使いやすくしよう

前回はDynamicsと接続してデータセットの作成を行いましたが、デフォルトの状態だと使いづらさがあるので見やすく、使いやすく、軽くするようにします。

スポンサーリンク

データセットをより使いやすく

Dynamicsのエンティティから作成したてのデータセットは、重たい、見辛い、分かり辛いの三拍子揃った使い勝手の悪さなので、少しでも使いやすくするための小ネタ集になります。

Power BIというよりは、Power Queryを使ってデータセットを編集していく形になります。

使いこなせればもっと小技があると思いますし、もしかしたら以下手順よりいい方法があるかもしれません。
全部のボタンを押して試した訳ではないので、「いろいろやろうぜ」精神でちょっと発掘してみてください。

フィールドをリネーム

取り込んだデータセットはフィールド名がスキーマ名(英数字)となっているため、分かりづらいです。

レポートでよく使う項目は日本語名などの分かりやすい名前にして列名を変えておきましょう。

オプションセットの表記設定

Dynamicsで使用するオプションセットはユーザ側から見やすくするためのラベルとデータ内で処理するコード値で構成されています。

ところが、データセットで取得する時は残念ながら、ラベル値が取れないみたいで、コード値のみの取得になってしまいます。
コード値だけだと、何を意味するかが分かりづらいため、オプションセットをグラフに取り入れる時はコード値変換が必要になります

Power Queryの編集画面でコード値を変換する数式列を入れます。

まずは、Power Queryの[列の追加]→[条件列]を選択。
Power Queryで条件列の追加

条件式の定義が出てくるので、ここでコード値と表示させるラベルを対応させます。
列名は日本語でもOKです。
コード値をラベルに変換

注意点を挙げるとすると、こちらで設定した変換ルールはPower Query内のルールとなるため、Dynamicsで設定したオプションセットとは独立した設定となります。
よって、Dynamics側でラベルを変更した場合は、都度Power Queryでのメンテナンスが入ることを留意しましょう。

<追記>
上記の方法以外にも、オプションセット値をラベルに変更する方法があるため、こちらも併せてご紹介します。

数式列を使用する

取得したデータセットはWebAPIで定義された内容以外に数式列を挿入することができます
数式列内で自レコードの内容を参照することが可能なので、これを使ってコードをラベルに変換する方法です。

リードの状態(statecode)をラベルに変換する場合は以下のような手順で数式列を作成します。

フィールド欄から列を挿入したいエンティティを右クリックで選択し、[新しい列]を選択
数式列の挿入

以下のように数式を入力します。
コードをラベルに変換した数式を入力
レコードの内容を参照する場合は、「エンティティ名[フィールド名]」とします。

数式自体はExcelチックなのでそこまで難しくありませんが、きっちり知りたい場合はData Analysis Expressions (DAX)のライブラリが基になっているのでそちらを参照。

これで、変換されたラベルが列に追加されます。
もちろん、グラフなどに使用することも可能です。

マスタテーブルを使用してテーブルをマージ

複数エンティティで同じオプションセットを使用していた場合、上記の数式列を使用した場合は、各テーブルそれぞれに対して数式列を挿入する必要があります。
ここでもしラベルの変更が入った場合、複数テーブルに対して数式の修正が入るためメンテナンス性が悪いです。

そこで、もう一つの方法がマスタテーブルを作成する方法です。

データセット作成後、取り込んだデータとは別にマスターテーブルを手動で作成します。

[ホーム]タブの[データの入力]を選択。
データの入力からテーブルを作成

オプションセットのコードと値の対応表となるマスタテーブルを作成。
(もしかしたらオプションセットの定義情報はWebAPIから持ってこれるかもしれませんが、まだ模索中です)
オプションセットのコードと値の対応表を作成

[リレーションシップの管理]を選択。
リレーションシップの管理でリレーション構築

リードと先ほど定義したリード状態を関連付けます。
[leads]の[statecode]と[リード状態]の[コード]が紐づくので、以下のように両フィールドを選択し、カーディナリティを設定する。
リードとオプションセットにリレーションを作成

このように、リレーションが生成されます。
マスタテーブルのリレーションが作成される

こちらの方法でも数式列は作成します。
でも、変換の仕方は異なります。
リレーションが生成された状態で、leadsに新しい列を作成し、以下のようにRELATED数式を入力します。
参照先マスタテーブルの値をRELATEDを使用して参照

数式のRELATEDは関連するテーブルの項目を指定し、キー(コード)と一致する参照先テーブルのレコードから値を取得する関数になります。
数式の詳しい解説はコチラ

これにより、関連するテーブルから項目を取得することができます。

こちらの方法の良いところは、コードとラベルの関係性がマスタテーブルに集約されているため、ラベルに変更があった場合はマスタテーブルを修正すればすべての変更が反映されることです。
各テーブルの数式をいちいち修正する必要がなくなります。
複数エンティティに跨って使用されるオプションセット(グローバルオプションセット)に対して有効です。

関連エンティティの取得

データセットでエンティティを取得するときは、自身のエンティティだけでなく、関連するエンティティも実は取得しています

プレビューを見ると、エンティティの検索フィールドは、このように「Record」と表記されます。
そして、右上に両サイドへ展開するようなアイコンも表示されるため、これを押すことで、参照先のレコードを取得することができます。
検索フィールドのレコードの展開

アイコンをクリックすると、参照先レコードで表示する項目が選択できるため、表示したいものを選択しましょう。
所有者の名前を表示したいときはこのように選択します。
所有者の名前を表示したいとき

このように、所有者の名前が表示されました。
もちろんレポートにも使えます。
検索フィールドが展開される

検索フィールドは親エンティティの特定のレコードを指しているため、一意に特定が可能ですが、子エンティティに対しても展開することができます
ただし、子エンティティのレコードは複数レコードある可能性もあるため、レコードでの展開ではなく、テーブルでの集計となります。

関連する子エンティティを集計する場合は、データセットを取得した時に、リレーション名の列で「Table」と表記されています。
こちらも右上に展開のアイコンがありますので押してみると、
子レコードの集計はTableで表記されている
このような、集計項目の選択となります。
集計項目の指定

よくみると、「〜のカウント」となっています。
つまり、子エンティティのレコードの値を取得する訳ではなく、集計した値を取得することになります。

このように関連する子エンティティの集計値を取得することができますが、注意点として集計時に条件をつけることができません。
SQLでいうHAVINGのようなヤツですね。

不要な列とテーブルは削除しよう

データセットを作成する時、エンティティ内のフィールドはデフォルトで全項目取得されます。
実際に標準で入っているグラフ表示には不要なエンティティが含まれることが多く、Power Query側で過剰に取得してしまうためメモリを圧迫して動作が重いです。
これ、ホントに重たくてイライラします。

データセット作成後、まずレポートで表示しない項目は削除してしまいましょう。
使わないフィールドは削除しておきましょう。
不要な列は削除する

また、前述したように、1エンティティだけを取得したつもりでも関連する親と子のエンティティも同時に取得してしまうことになるので、データセットに取り込むエンティティは最小限としておきましょう。

例えば、取引先会社と取引先担当者をレポート表示する場合、取得対象のエンティティを取引先担当者だけにして、取引先会社は検索フィールドからのレコード展開で取ってくるといったやり方になります。

PowerBI
スポンサーリンク

コメント