Translate

2021年6月12日土曜日

【Power BI 備忘録】インフォグラフィックデザイナーのグラフで、最初と最後のデータにラベルを付けるDAX

 Power BIのカスタムビジュアルであるインフォグラフィックデザイナーの折れ線グラフなどで、最初と最後のデータポイントにラベルをつける方法です。


まず、下記のように、データの日付の最初と最後で値を計算するメジャーを作成します。

この場合の注意点ですが、データを「 FORMAT([OrderQ],"General Number")」のような形にしないと、最初と最後以外のラベルが「0」となってしまうようです。なお、普通の折れ線グラフの場合は、FORMATがなくても最初と最後のみにラベル表示ができます。

なお、数値データの代わりにカテゴリー列を指定すれば、カテゴリーラベルを表示させることができます。

Label_Measure = 

VAR min_label = CALCULATE(MIN('SalesData'[OrderDate]), ALLSELECTED('SalesData'))

VAR max_label = CALCULATE(MAX('SalesData'[OrderDate]), ALLSELECTED('SalesData'))

VAR LABEL = FORMAT([OrderQ],"General Number")

RETURN

IF( OR(

    MIN('Calendar'[Date]) = min_label,

    MAX('Calendar'[Date]) = max_label)

    ,LABEL)


2021年6月6日日曜日

【Power BI 備忘録】動的なカテゴリー軸:スライサーでグラフの軸を変更するDAX

 Power BIで、図表のカテゴリー軸をスライサーで切り替えたい場合があります。


異なるカテゴリーの軸をスライサーで切り替えて利用すると、1つのグラフで2つのグラフの情報を表示できるようになります。


いわゆる「動的な軸」「動的な凡例」というものです。


ネット上には、「リレーションシップのないカテゴリーテーブル」を利用する方法などが紹介されていたりしますが、他にも図表がある場合には、他の図表との相互作用ができなくて困ることになるでしょう。


ネット上の情報は、限定された環境での例であることが多く、あまり役立たないことがあります。


では、どうすればいいのでしょうか。


まず、Power Queryを使ってカテゴリー列があるファクトテーブルに「インデックス列」を作成します。


次に、スライサーの切り替え用のテーブルを作成します。UNION関数、DISTINCT関数、SELECTEDCOLUMNS関数を使って、複数のカテゴリー列を縦方向に結合します。インデックス列も新しいテーブルに取り込んでおきます。インデックス列でファクトテーブルとリレーションシップを作成して、縦に結合したカテゴリー列をスライサーに設定すれば完了です。


新しく作成したテーブルのカテゴリー列をグラフのカテゴリー軸に設定し、スライサーでカテゴリーを選ぶとグラフの軸を切り替えることができます。カテゴリー切り替え用のテーブルとファクトテーブルはインデックス列でリレーションしているので、動的な軸のグラフとファクトテーブルのデータを用いた他のグラフとの相互作用が可能です。






【Power BI備忘録】カテゴリー(軸)の表示順を並べ替えるDAX

 Power BIで、国/地域や製品分類、製品型番などのカテゴリーを使って図表を作成する際に、カテゴリーを意図した順番で並べたい場合があります。


カテゴリーの列は、別の「列」によって並べ替えを行うことができますが、並び順の列がない場合は、並べ替え用の順序の列を作成する必要があります。

並べ替え用の順序の列を作成するには以下のような方法があります。

・新たに「カテゴリー」と「並び順」の2列のテーブルを作成し、「カテゴリー」によってファクトテーブルとリレーションを作成するという方法があります。そして、ファクトテーブルに「RELATED関数」を使って並べ替え順の列を作成することができます。


・SWITCH関数を使って、カテゴリーに対応した順序の数字の列を直接ファクトテーブルに作成するという方法があります。


いずれの場合も、「カテゴリー」の文字列は手入力しない方がいいでしょう。

DISTINCT([カテゴリー])でカテゴリーのテーブルを作成し、テキストをコピーして、新しいテーブル作成やSWITCH関数を使って作成するDAXにテキストをコピペするのがよさそうです。


テーブル作成が不要なので、SWITCH関数を使って並べ替え用の列を作成する方法がいいのではないかと思います。

新しい列の作成:

Sort_By = SWITCH (TRUE (),

    Table[Category] = "Category A", 2,

    Table[Category] = "Category B", 1,

    Table[Category] = "Category C", 3,

    BLANK ()

)





【Power BI備忘録】選択した月から、過去Nカ月分のデータを表示するDAX

 「Power BIで選択した月から、過去Nカ月分のデータを表示する方法」をネットで検索すると、「切断された日付テーブル(リレーションシップのない日付テーブル)」をスライサーに利用する方法がよく紹介されています。


「リレーションシップのない日付テーブル」で選択した「月」の数字によって、図表の軸の「月」の数字をフィルターするという方法です。


しかし、「リレーションシップのない日付テーブル」を使わなくても、DATESINPERIOD関数を使えば「選択した月から、過去Nカ月分のデータを表示する」ことが可能です。

ただし、図表の日付軸にファクトテーブルの日付列を設定する必要があったりします。

DAXもDATESINPERIOD関数を使った場合は、下記のような簡単な内容です。

Measure (last n months) =

CALCULATE (

    SUM ( Table[Sales] ),

    DATESINPERIOD ( ‘Date'[Date], MAX ( ‘Date'[Date] ), – [N Value], MONTH )

)


「リレーションシップのない日付テーブル」など作成せずに済むので、ファクトテーブルの日付列と日付テーブルの日付を利用して試してみる価値はあります。


ネット上には、「ベストプラクティス」ではない事例が数多くあるようです。


Power BIは日本語の情報が少なく、ネット上の「ベストでない情報」に翻弄されることがよくあるようです。


私もDATESINPERIOD関数が役立つことに気づくのにかなり時間がかかりました。