今回は前回の内容に従って、カレンダーテーブルを実際に作成してみましょう!
カレンダーテーブルを作成する時にDAX(エクセルのワークシート関数のようなもの)も使用します
元のデータはこちらの3つのテーブルになります
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/0ce153220684e0c1ef5db2c37e059022-644x144.png)
ですので当初のリレーションはこのようになっています
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/21ade95daff05d03daaa44727ba6faa9-644x324.png)
こちらにカレンダーテーブルを組み込む形になります
新しいテーブルの作成
カレンダーテーブルの作成は最初、こちらをクリックするところから始まります
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-25-644x163.png)
すると数式が入力できるようになります
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-26-644x211.png)
左辺をCalendarとし、右辺にCaを入力すると、入力するDAXの候補がでてきます
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-27.png)
こちらの候補から「CALENDAR」をTabキーで選択してください
CALENDAR()の〇括弧:()の中には、連続した日付を作成する際の開始日と終了日を指定します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/6a820e7c99d136d66565335f224fbe57.gif)
YEAR/年とMONTH/月の列の作成
連続した日付データができたので、今度は日付データを使用してYEARとMONTHの列を作成します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-28.png)
上の画像の「新しい列」をクリック後、まずはYEARの列を作成します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-30.png)
YEARの列を作成するにはDAX「YEAR」を指定します
その際に、コツが一つあります
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/ea067d83d2ebc3fdc02eb680dc1f5329.gif)
丸括弧:()の中で’を指定すると()中に入れる列名の候補が選択できます
今回は’Calendar[Date]の列を指定して、日付列(2021/04/01⇒2021)を年に変換して列を作成します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-31.png)
今、DAX:YEARをして列を作成しましたが、通常のエクセルのワークシート関数を使用した時との違いは、セルではなく列単位で関数を使用しているという点です
MONTHの列もYEARの列と同様に作成します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-32.png)
会計年度の調整
前回も触れましたが、3月決算の場合には会計年度を調整する必要があります
例えば、2022年1月の場合には、上記のYEAR関数で作成した列には「2022」と表示されます
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-33.png)
ただ実際には会計年度は2022から1を引いた「2021」になります
ですので、MONTH列をもとにしてIF関数により1月~3月の会計年度を調整します
if(MONTH([Date])<4,YEAR([Date])-1,YEAR([Date]))
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-34-644x262.png)
ちなみに四半期の列を作成するQUARTER関数を使用すると次のようになります
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-35.png)
4月が第2QUARTERとなります
これは12月決算をもとにしてDAXが作成されているからです
この場合も3月決算にあわせてIF関数を使用します
IF(MONTH([Date])<4,4,if(MONTH([Date])<7,1,IF(MONTH([Date])<10,2,3))
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-36-644x169.png)
リレーションシップの作成
カレンダーテーブルをひとまず、形にはしました
これだけでは、カレンダーテーブルを活用することはできません
他のテーブルとリレーションシップを作成・紐づけを行う必要があります
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/204597927a5e0a587fc4e3889788118b.gif)
リレーションシップを作成するには、以下の画面で操作が必要です
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-37.png)
こちらの画面で売上データの「日付データ」とカレンダーテーブルの「Date」を紐づけます
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-38-644x242.png)
操作はいたって簡単です
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/5d3a2df954c021e9b7b8f363e72f0848.gif)
該当する列の上でドラックをするだけです
これで下の画像のようなリレーション(売上データ:多⇒Calendar:1)が完成します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-39-644x580.png)
これで売上データとカレンダーテーブルを一緒に活用できるようになりました
では、レポート画面で「マトリックス」を作成してみましょう
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-40.png)
マトリックスの行にカレンダーテーブルの「YEAR」を配置します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-41-644x316.png)
YEARの配置もドラックで行います
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/7dfba40b3852ec3c80586f02e140f1ce.gif)
そしてマトリックスの値に売上データの売上金額を配置します
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-42-644x406.png)
すると上記の画像のように「年」毎に売上金額の合計が算出されています
これはカレンダーテーブルと「多:1」の紐づけが行われているからです
では試しに、リレーションを消してみます
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-43.png)
すると、以下のように2021年も2022年も同じ金額になってしまいます
![](https://analytic-vba.com/wp/wp-content/uploads/2022/07/image-44.png)
これは、年ごとの多:1の紐づけが行われないまま、単純に売上金額の合計が算出されるからです
<まとめ>
今回はカレンダーテーブル自体を作成しました
エクセルと違い、テーブルも列も一から作る点がとても斬新だと思います
ただ、これだけだとまだ実用的なカレンダーテーブルとはいえません
次回、調整を加えていきたいと思います