▶ 中間テーブルを作ってリレーションシップの設定をする方法はこちらをご覧ください
▶ カレンダーテーブルの作成方法はこちらの投稿をどうぞ
はじめに
今回は作成した中間テーブルに新しい列を加える方法をご紹介します。複数のテーブルの情報を中間テーブルに集約して集計しようとした場合に、中間テーブルに新しい列を追加したくなることがあります。たとえば、日付のテーブルを作っていた際に月単位や会計年度単位での集計をするような場合です。今回はカレンダー手ぶるに月や年、会計年度の列を加える方法を基本から解説します。
カレンダーテーブルに新しい列を加える
カレンダーテーブルに「年」「月」「会計年度」「曜日」を加えてみることにしましょう。新しい列を加えるときには「データ」画面の「新しい列」からおこないます。
必要な列を1つずつ加える
まずは1つずつ列を加える方法です。以下の手順で「新しい列」をクリックしてください。
すると次のような「新しい列」を定義する画面に切り替わります。
赤枠の部分で新しい列を定義します。まずは「年」の列を作ることにしましょう。等号記号(=)の左側に列名を指定して、右側で列を定義します。
年の場合はYear関数で引数に日付を指定すればOKです。書式も確認しておきましょう。以下のようになります。
日付は、検索する年を含む datetime 形式またはテキスト形式の日付となります。赤枠のところでyear関数を入力したらEnterをクリックします。
このように「年」を追加することができました。数字だけでなく「2021年」のように表記したければ、次のようにします。
年 = year('カレンダーテーブル2'[Date]) & "年"
このように「&」演算子で”年”という文字とつなぐだけでOKです。同じ要領で「月」も追加することができます。書式だけ確認しておきましょう。
曜日や会計年度は少し工夫が必要です。順にみていきましょう。まずは「曜日」からです。「曜日」はまず①「曜日」を表す「数字」を取得して②これを「曜日」に変換します。「曜日」を表す「数字」はWeekday関数を使います。書式は以下の通りです。
日付の曜日を示す、1 から 7 までの整数で返します。 既定では、日付範囲は 1 (日曜日) から 7 (土曜日) です。この戻り値を「return_type」で指定することができます。
return_type | 戻り値 |
1 (default) | 日曜日(1)に週が始まり、土曜日(7)に週が終わります。 番号は1から7となります。 |
2 | 月曜日(1)に週が始まり、日曜日(7)に週が終わります。 番号は1から7となります。 |
3 | 月曜日(0)に週が始まり、日曜日(6)に週が終わります。 番号は1から7となります。 |
あとは数字で表現された「曜日」の情報を日本語表記に修正すればOKです。これにはIf構文を使えばよいですね。やってみましょう。ここではreturn_typeは3とします。
曜日 = if(WEEKDAY('カレンダーテーブル2'[Date],3)=0,"月",if(WEEKDAY('カレンダーテーブル2'[Date],3)=1,"火",if(WEEKDAY('カレンダーテーブル2'[Date],3)=2,"水",if(WEEKDAY('カレンダーテーブル2'[Date],3)=3,"木",if(WEEKDAY('カレンダーテーブル2'[Date],3)=4,"金",if(WEEKDAY('カレンダーテーブル2'[Date],3)=5,"土","日"))))))
このようにWEEKDAY関数で曜日を表す数字を取得して、これをif関数で日本語表記に変換するだけです。簡単ですね。この実行結果は以下となります。
順に分解して考えれば簡単ですね。次に会計年度も追加してみましょう。こちらも分解して考えます。まずは対象の日付の四半期を判定します。四半期の判定にはQuarter関数を使います。書式は以下のようになります。
Quarter関数の戻り値は1から4の整数です。四半期を1 (1 月から 3 月) から 4 (10 月から 12 月) までの数値として返します。これを使えば、Quarter関数の戻り値が1のときは(1月から3月のときは)日付から「年」を取得して、そこから1を引いたのが会計年度、その他のときは(4月~12月のときは)は取得した日付から取得した「年」を会計年度として使うことができますね。これもif構文で場合分けをして、最後に「&」演算子で表記を調整するとよいでしょう。次のようにします。
はじめは難解そうに見えるけど、理解してしまえば簡単ですね。Power BIでレポートを作る際にはこのような設定は1回だけの作業なのでこれでもよいですが、決まりきった作業なので必要な列をまとめて定義できるようにしておくと便利ですね。その方法もご紹介します。
必要な列をまとめて定義する
先ほど定義した年、月、曜日、会計年度をまとめて定義する方法をご紹介します。列を追加する関数AddColumns関数を使います。まずは書式の確認です。
「テーブル」では、テーブルを返り値とする任意のDAX式を指定することができます。ここでは、Calendar関数を使ってテーブルを定義することにしましょう。「新しい列名」「定義」がワンセットで追加したい列の数だけこの組み合わせを設定します。今回、追加したい列は「年」「月」「曜日」「会計年度」の4つです。
テーブルと4つの列を追加するので、次のように「新しいテーブル」から設定します。テーブルを作成する際に同時に必要な列をまとめて定義する、という操作になります。
②の部分のコードは以下となります。
カレンダーテーブル3 = ADDCOLUMNS(CALENDAR(DATE(2021,5,1),DATE(2022,11,30)) ,"年",YEAR([Date])&"年","月",MONTH([Date])&"月","曜日",if(WEEKDAY([Date],3)=0,"月",if(WEEKDAY([Date],3)=1,"火",if(WEEKDAY([Date],3)=2,"水",if(WEEKDAY([Date],3)=3,"木",if(WEEKDAY([Date],3)=4,"金",if(WEEKDAY([Date],3)=5,"土","日")))))),"会計年度",if(QUARTER([Date])=1,year([Date])-1 ,year([Date]) ) & "年度")
まとめ
今回はテーブルに列を加える方法を紹介しました。1つ1つ列を加える方法と、テーブルを作成する際にまとめて列も定義する方法があります。数が少なかったり、汎用的に使うものでなければ1つ1つ加える、よく利用するものであればあらかじめ使いまわせるコードとして用意しておいて、テーブルを作成する際にまとめて列を定義してしまうとよいですね。やりやすいように使い分けていきましょう。
コメント