Power BI：ビジュアルに表示するラベルを１つだけにしたい

## 序
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/14cfcc8f-b84f-01ac-3446-b717f215c456.png)

Power BI では、折れ線グラフのビジュアルを配置した際にラベルも一緒に表示できます。しかし、Excel グラフのようにラベルを必要に応じて非表示にすることができません。

「レコードの最終行のみのラベルを表示したい」という需要がどれほどあるのかは分かりませんが、これを応用すると、例えば「ｎ未満のラベルは非表示」といった風に、見たいデータだけ目立たせることができると思うので、記事として残してみることにしました。

### データを用意する
| 売上日       | 具         | 売上個数 |
|--------------|------------|----------|
| 2024-01-01   | 鮭         | 100      |
| 2024-01-01   | 梅         | 80       |
| 2024-01-01   | 明太子     | 90       |
| 2024-01-02   | 鮭         | 110      |
| 2024-01-02   | 梅         | 85       |
| 2024-01-02   | 明太子     | 95       |
| 2024-01-03   | 鮭         | 105      |
| 2024-01-03   | 梅         | 78       |
| 2024-01-03   | 明太子     | 92       |
| 2024-01-04   | 鮭         | 115      |
| 2024-01-04   | 梅         | 82       |
| 2024-01-04   | 明太子     | 88       |
| 2024-01-05   | 鮭         | 120      |
| 2024-01-05   | 梅         | 79       |
| 2024-01-05   | 明太子     | 93       |

まず、売上日と売上がわかるデータを用意します。今回は心の底から適当にChatGPTに「Power BI の勉強用にダミーデータを作成したいから、おにぎりの具ごとの売上と売上日をテーブル形式で返して欲しい」と入力し、出力されたテーブル形式の回答を元に作成しています。ツナマヨがない。

### 計算列を追加する
単に、日別の売上を折れ線グラフで出力したい場合は、テーブルビューに切り替えて計算列を追加し、以下のDAX式を入力します。

~~~
ラベル表示用の列 = 
     IF(
         'テーブル'[売上日] = MAX('テーブル'[売上日]),
         'テーブル'[売上個数],
         BLANK()
     )
~~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/2d10d202-7cad-9068-1c4b-5bdbdd3bab3b.png)

そうしてできた列が上の画像のとおりです。要するに、表示したい値以外を空白値で埋めてしまうという単純なものです。あとはこれをビジュアルに配置してあげるだけです。

### 折れ線グラフを配置する

折れ線グラフを配置したら、X軸には「売上日」を、Y軸には「売上個数の合計」を、凡例には「具」をドラッグ・アンド・ドロップで入れていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/9249ab7e-400c-630d-930d-088a8ec1eb59.png)

次に、ビジュアルの書式設定タブに切り替え、データラベルのトグルをオンにし、その階層下にある「値」のトグルもオンにした上で展開します。現れた「フィールド」に先ほど作成した計算列（ラベル表示用の列）をドラッグ・アンド・ドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/f2f8c2b5-26af-d9be-c4cf-10196ca9b533.png)

あとは必要なビジュアルを配置して作業完了です。筆者は「カード」で売上個数の合計を表示し、さらに「スライサー」で具ごとにデータが絞り込まれるようにビジュアルを配置しました。この辺りは自由です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/5b48237b-911c-9991-3b37-ef84f64c9e18.png)

### 応用
こういった「ビジュアルのためだけの処理」は、計算列を使用するよりも、メジャーを使用した方が良いように考えています。他の誰かがテーブルを見た時に「なんだコレ」となってしまう可能性が高いのと、計算処理に時間を要する可能性があるためです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/1acb35f6-b067-c39f-480e-2848d94aa871.png)

ということで、メジャーを使って「月別の売上」をビジュアルで表示してみました。同じデータを使ってしまうと、当然ですが、上の画像のように直線になってしまいます。みなさんはぜひお手元の月別の売上が表示されそうなテーブルをご用意ください。

### メジャーを2つ用意する
まずは月別のおにぎりの具ごとのデータを集計します。新しいメジャーをクリックし、以下のDAX式を入力しましょう。

~~~
月別データ = 
    CALCULATE(
        SUM('テーブル'[売上個数]),
        DATESMTD('テーブル'[売上日])
    )
~~~

次に、先ほど計算列でやったような空白処理を施したメジャーを作成します。

~~~
月別データのラベル表示用 = 
VAR _LastDate = CALCULATE(MAX('テーブル'[売上日]), ALL('テーブル'))
VAR CurrentDate = MAX('テーブル'[売上日])
RETURN
   IF(
       CurrentDate = _LastDate,
       [月別データ],
       BLANK()
   )
~~~

### 折れ線グラフを配置する
最後に、X軸に「売上日」を、Y軸に「月別データ」を、凡例に「具」をそれぞれドラッグ・アンド・ドロップします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2952933/427c5d45-da9a-8b5c-fdde-ace9a4f5163f.png)

計算列で行った手順と同様に、ビジュアルの書式設定タブに切り替えて「データラベル」のトグルをオン、さらに、その階層の「値」のトグルをオンにし、その「フィールド」に月別データのラベル表示用に作成したメジャーをドラッグ・アンド・ドロップします。

以上で作業は終了です。

## まとめ
BLANK関数を使うことで、データラベルの表示を「見た目の上では」消すことができました。単に値が空になっているというだけで、ラベルの表示と非表示を切り替えているわけではありませんが、より、実現したいレポートに近付けることはできるようです。

### 余談
変数宣言で LastDate と入力してしまい、エラーが消えず沼りました。LASTDATE関数が存在しているため、変数として宣言できません。変数名には注意しましょう。今回は _LastDate で誤魔化しています。