【PowerBI】同日or同曜日比較どちらが正解？

# はじめに

こんにちは！株式会社コズムでデータアナリストをしている岸本です。

今回は、Power BIで昨対比を行う際のお話をさせていただきます。

ある日、日課の如く前年比較を行っていた際に思ってしまったのです。「**同日比較**と**同曜日比較。結局どっちが正解なの？**」

データ分析を行う中で、前年と当年のデータを比較することからは決して逃れられないのです。日別比較の際に重要となるのが「**同じ日付を比較するのか、同じ曜日を比較するのか**」という点です。

この記事では、同日比較と同曜日比較のどちらが適切なのか、どのように使い分けるべきかを具体例とともに説明します。



# 1. 同日比較 vs 同曜日比較: どちらが正解？

データを日別で比較する際、以下の2つのアプローチがあります。

1. **同日比較**: 例）2024/09/10（火） vs 2023/09/10（日）
2. **同曜日比較**: 例）2024/09/10（火） vs 2023/09/12（火）

どちらが適切か、という質問に対する答えは**「両方必要」**です。（業態によりますケド）

それぞれに役割があり、うまく使い分けることが重要なのです。

### なぜ両方使うのか？

例えば、ある遊園地の来場者数を前年と比較するとします。

（遊園地のイメージは某ランドでも某スタジオジャパンでも某ハイランドでもなんでも構いません）

### 同曜日比較の良さ

まず、土日と平日って~~値段と~~混み具合全然違いますよね…。来場数がガラッと変わるため、一般的には**「同じ曜日」**で比較することが基本的には安定したデータが取れます。

### 同日比較の良さ

一方で、「都民の日（10月1日）にランド行ったら激込みだった(泣)」みたいなことあると思います。

特定の日付が重要となるイベント（クリスマスや夏休みなど）や、日付が決まっている祝日（GWや文化の日）では、曜日に関係なく**特定の日を基準に比較**することが重要です。このような場合には、同日比較を使用します。



# 2. Power BIでの同日比較の手法

### 前提条件

- カレンダーテーブルを用意しておく
- カレンダーテーブルとデータテーブルがリレーションされていること

次に、同日比較を行うための手順です。まずは、Power BIで同日比較を簡単に実装する2つのDAXメジャーコードを紹介します。

```
当年 =
CALCULATE(
    SUM('Visitor_Data'[Visitors]),
    'Visitor_Data'[Date] < DATE(2024,4,1),
    'Visitor_Data'[Date] >= DATE(2023,4,1)
)

前年_同日 =
CALCULATE(
    SUM('Visitor_Data'[Visitors]),
    'Visitor_Data'[Date] < DATE(2023,4,1),
    'Visitor_Data'[Date] >= DATE(2022,4,1)
)

```

このDAX式を使って、当年と前年の同日データを取得します。

<img width="350" alt="スクリーンショット 2024-09-17 175800.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816220/dc97303e-9e32-82ac-1743-e83f8c57bcd6.png">

<img width="342" alt="スクリーンショット 2024-09-18 094832.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816220/1410e6d7-0081-21ba-0b4d-7d0b67700415.png">

この方法なら同じ日付を使って比較が可能です。

飲食店でバイトしていた時、給料日の方が多い毎月25日は混んでいた記憶があります…。



# 3. 同曜日比較の手法

同曜日比較は少し手間がかかりますが、少し手を加えるだけです。

1. データテーブルに**「来年同曜日」**という列を追加します

```
来年同曜日 =
[Date] + 52*7

```

この式により、1年後の同じ曜日を計算できます。

1. 新しく作成した「来年同曜日」列とカレンダーテーブルの日付列を**「非アクティブ」**でリレーションします
2. 前年のデータを取得するDAX式を変更します

```
前年_同曜日 =
CALCULATE(
    SUM('Visitor_Data'[Visitors]),
    'Visitor_Data'[来年同曜日] < DATE(2024,4,1),
    'Visitor_Data'[来年同曜日] >= DATE(2023,4,1),
    USERELATIONSHIP('日付テーブル'[Date],'Visitor_Data'[来年同曜日])
)

```

<img width="350" alt="スクリーンショット 2024-09-18 095015.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816220/624e1e22-9d6d-bc4e-3067-1198313f5824.png">

この方法を使えば、前年の同曜日データを取得し、週ごとの正確な比較が可能になります。

同週同曜日での比較なので、成人の日やスポーツの日などの3連休にも対応ができます！



# 4. 応用: 同日・同曜日比較の切り替えスライサーを作成する

どちらの比較も使いたい場合は、**スライサー**を使って切り替える方法が便利です。以下の手順でスライサーを作成できます。

1. **切り替え用テーブルをPower Queryで作成**
    
    例として「switch_dateDay」というテーブルを作成し、1は同日、2は同曜日に対応させます。
    
2. **メジャーを作成**
    
    以下のDAXコードで、スライサーの選択に応じて同日・同曜日比較を切り替えるメジャーを作成します。
    

```
前年_切り替え =
VAR dateDay = SELECTEDVALUE('switch_dateDay'[id])
VAR dateBase =
CALCULATE(
    SUM('Visitor_Data'[Visitors]),
    'Visitor_Data'[Date] < DATE(2023,4,1),
    'Visitor_Data'[Date] >= DATE(2022,4,1)
)
VAR dayBase =
CALCULATE(
    SUM('Visitor_Data'[Visitors]),
    'Visitor_Data'[来年同曜日] < DATE(2024,4,1),
    'Visitor_Data'[来年同曜日] >= DATE(2023,4,1),
    USERELATIONSHIP('日付テーブル'[Date],'Visitor_Data'[来年同曜日])
)
RETURN
IF(
    dateDay = 1,
    dateBase,
    dayBase
)

```

1. **スライサーを配置**
スライサービジュアルを作成し、「switch_dateDay[name]」をフィールドに入れて切り替えを実装します。
    
    スライサーの設定は、「単一選択」「選択を必須」をONにしてください。
    

これでスライサーは完成です。ワンクリックで同日・同曜日が**とても簡単**に切り替えらえます。



# まとめ

Power BIでの昨対比において、**同日比較**と**同曜日比較**は両方とも重要な手法です。それぞれの特徴を理解し、分析目的に応じて使い分けることが成功の鍵となります。この記事で紹介した方法を活用して、より効果的なデータ分析を行ってみてください！

---

### 参考資料

[こちら](https://qiita.com/y-komuro/items/de3e2cb3dea129260079)を参考にカレンダーテーブルを作成します。