TopoJSON For PowerBIに関連するPower BIの操作方法についてのTipsをご紹介しています。
今回はレポートのマップのシェイプで「凡例を表示する方法」のご説明になります。
なおPower BIのバージョン:は「2.81.5831.761」で確認をしています。
凡例用のデータはどこで作るか
マップのシェイプではクエリーに設定されている項目をフィールドにセットする事で凡例を地図上に表示させることができます。
そのための凡例用のデータをどこで作るか?ですが、やり方としては下記の2つが考えられます。
- 元となるExcelシートであらかじめ凡例用のデータ項目を作っておく。
- Power Queryで凡例用の項目を定義して作る。
どちらでも対応できますのでお好みのやり方を選択していただければ幸いです。
なお考えられる両者のメリットとデメリットは下記のようになります。
ツール | メリデメ | 内容 |
---|---|---|
Excel | メリット | ・セル関数だけでデータが作れる。 |
デメリット | ・本来必要ではない列を作らなければならない。 | |
Power Query | メリット | ・Excelは変更しなくて済む。 |
デメリット | ・Power QUery M言語という新しい言語を覚える必要がある。 |
凡例用データの要件定義
マップのシェイプに凡例を表示させるためにデータを用意すれば良い事は解りますが、適当でも良い場合もありますが、センシティブなデータの場合は定義が有った方が良い事と存じます。
例えば一例としてゼロ件を目標にしている「交通事故発生件数」などのデータの場合、「凡例をどのような巾(数値レンジ)で用意するか?」は地域によって差があるので一概には決められませんが、次のような要件につきましては定義が有った方が良いように思います。
0件は別ランクにするか?
例えば10件きざみでランクを分けたとして、0件は「0件単独にして次のランクを1~10にするか?」、それとも「0件は分離せずに0~9のランクに含めるか?」という細かな仕様の違いは意見が分かれる可能性があります。
つまり同じ10きざみと言っても、「0~9なのか?」「1~10なのか?」は決めておいた方が手戻りが無い認識です。
凡例に表記する値はランクの最低値か?最高値か?
内容によってコロコロ変えてしまうと印象操作と言われてかねませんが、10きざみで「1~10」という仕様の時に、凡例に表記する数値を「1」とするのか「10」とするのかは決めておくべきであろうと思います。
『「10」が「1」のランクに含まれている』のと、『「1」が「10」のランクに含まれている』というのは印象が異なることと存じますが、どちらかに決める必要があります。
なお「0~9」という仕様の時は、10きざみであることが解り易いように表記する値は「0」を選択する事が多いと思います。
凡例用データの計算式
以上の要件定義を10きざみを例にすると、次の3パターンにまとめることができます。
- 「0~9」「10~19」…というランクを「0」「10」…で表記する。
- 「0」「1~10」「11~20」…というランクを「0」「1」「11」…で表記する。
- 「0」「1~10」「11~20」…というランクを「0」「10」「20」…で表記する。
Excelの場合
この3パターンをExcelのセル関数で実装する場合はそれぞれつぎのような式になります。
なお1行目のA列に元となるデータがある時の式で、αは10きざみであれば10になります。
また元となるデータがゼロ以上である場合の式となり、負の数値は考慮していませんのでご注意ください。
- =INT(A1/α)*α
- =(INT((A1-1)/α)*α+1)*SIGN(A1)
- =INT((A1+α-1)/α)*α
・INT関数は引数の小数点以下を切り捨てます。
・SIGN関数は引数が0であれば0、プラスであれば1、マイナスであれば-1を返します。
Power Queryの場合
前回の記事「Power BIで数値項目をカンマ区切り表示にする方法」の中でPower QUeryで「例から列を追加する…」やり方についてご説明しましたが、今回はカスタム列を使用して凡例の元となるデータ(列)に関数を設定して凡例用データの項目を作りたいと思います。
Excelのセル関数の式をPower QUery M言語に変換すると下記のようになります。
- =Number.RoundDown([A161001]/α)*α
- =(Number.RoundDown(([A161001]-1)/α)α+1)Number.Sign([A161001])
- =Number.RoundDown(([A161001]+α-1)/α)*α
・セル参照A1が[項目名]に変更になります。
・INT関数はNumber.RoundDown関数に変更になります。
・SIGN関数はNumber.Sign関数に変更になります。
※関数名の大文字小文字はその通りに入力します。
カスタム列を作るために、まずメニューの「列の追加」から「全般」のリボンにある「カスタム列」をクリックします。
① ② ③
①カスタム列の画面から画面右の「使用できる列」にある凡例の元となるデータ項目(今回はA161001)を選択し、「<<挿入」のボタンをクリックします。
②カスタム列の式に「[A161001]」がセットされます。まずは赤枠の「新しい列名」のデフォルト「カスタム」を削除して列名を入力します(今回はA1061001r)」
③カスタム列の式をPower QUery M言語の式に変更します(画面は「3」の式を10きざみで設定しています)。
画面左下の赤下線部分に「構文エラーが検出されませんでした」と表示されていることを確認して「OK」ボタンをクリックします。
以上の操作によりカスタム列「A161001r」が追加されますので凡例用データが要件どおりになっているか?確認します。
もしも修正が必要な場合は、画面右の適用したステップの「追加されたカスタム」の右端の設定アイコン(赤枠)をクリックするとカスタム列の画面が開かれますので同じような操作をしてください。
全てが終わりましたら、メニューをホームに戻しリボン左端の「閉じて適用」のアイコン部分をクリックしてPower Queryを終了させます。
Power BIに戻り、
①新しく設定した項目A161001rをフィールド欄からマップのシェイプのフィールドの「凡例」欄にドラッグします。
②デフォルトでの凡例が表示されます。
これを変更するには「書式」をクリックします。
③ ④
③書式の中にある「凡例」を見ると「位置」を変更する設定があります。
左図では「下中央」にしています。
④次にデフォルトではフィールドの項目名になっている「凡例の名前」を変えて見ます。
⑤
⑤最後にお好みですが「データの色」を変更して見ます。
設定されているランクの値に対して色を指定することができます。
なお、10きざみでランクを設定した場合でも、データの中に該当ランクのデータが存在しない時はそのランクは飛ばして表示されます。
例えば20のランクが存在しなければ、「10、30、40」という表示になります。
最後に
今回はPower BIでの凡例設定につきましてご紹介いたしました。
次回は「Power BIで数値項目をカンマ区切り表示にする方法(PART 2)」になります。
以上最後までご一読いただき誠にありがとうございました。