Partager via


[Power BI] 日付型のデータを用意する方法

Microsoft Japan Business Intelligence Tech Sales Team 伊藤

 

以前の記事 [Power BI] DAX入門(2) カレンダーテーブルの作成 にてカレンダーテーブル (日付マスタ) の必要性とその作り方をご紹介しています。このカレンダーテーブルを使うには、分析対象のデータに結合するための列、すなわち日付型の列が必要です。

また、日付型のデータがあると、例えばこんなことができます。

カレンダーを使った日付指定

今日を基準とした相対的な日付指定

時系列予測

image image image

 

さらにカスタム ビジュアルを使えばこんな表現もできます。

Beyondsoft Calendar

Calendar by Tallan

image image

今回は、こんなに便利な日付型の列を作成する方法をクエリ エディターと DAX の2通りでご紹介します。ただし DAX は 1990 年 3 月 1 日以降の日付をサポートするため、それ以前のデータを含む場合はクエリ エディターを使用します

例1:年、月、日 をそれぞれ数値で表す列から、日付型の列を作成

下記のような列を持つテーブルを想定しています。(実際はこの他に、商品名や売上額など、様々な列があると思います。)

2017

11

1

2018

1

11

2018

2

3

 

クエリ エディターで作成

例から列を追加」します。これは Excel 2013 の新機能である「フラッシュ フィル」と似た機能です。

上記の 3 つの列を選択し、右クリック メニューから [例から列を追加する…] をクリックします。

image

右側に表示される空の列「列1」に「2017/11/1」と入力します。ポイントは「2017/11/01」などとせず、列にある値そのままを入力することです。
(なので、もし元の列が文字型で「01」という値が入っている場合は「2017/11/01」と入力するようにします。)

image

この例では以下のように、こちらの意図を汲み取ってすべての行にデータが入力され、どのような変換式を作成したのかが表示されます。(列名は自動的に「結合済み」に変わります。)

image

この変換で問題なければ [OK] をクリックします。(思い通りにならないときは、追加で何行かサンプル値を入力してみてください。)

image

データ型を「日付」に変更し、必要に応じて列名を変更します。下図は変更後のイメージです。これで日付列を使ってカレンダーテーブルと結合できます。

image

 

DAX で作成

DATE 関数 を使用すれば、一発で解決します。[新しい列] で次のような式を入力します。

 日付 = DATE([年],[月],[日])

image

データ型を「日付」に、書式を「yyyy/M/d」に変更します。(リレーションを作成するにはデータ型が同じである必要がありますが、書式は無関係です。)

image

 

例2:年月日を8桁の数字 (例:20171101) で表す列から、日付型の列を作成

クエリ エディターで作成

例1 と同様に「例から列を追加」します。今度はサンプル値として「2」と入力すると複数の候補が表示されるので、そこから選択します。

image

上から2番目の「2017/11/01 (年月日 からの日付)」を選択し、[OK] をクリックします。

image

目的の列ができました。

image

 

DAX で作成

例1 で使った DATE 関数 を使いますが、その引数となるデータを作るには、割り算や MOD 関数 を使うことも、文字列のように LEFT 関数RIGHT 関数 を使うこともできます (暗黙的な型変換が行われます)。ここで紹介する以外にも色々な方法があると思います。

 

割り算と MOD 関数 を使用した例

列を追加し、次の式を入力します。

 日付 = DATE([年月日]/10000, MOD([年月日]/100,100), MOD([年月日],100))

DATE 関数の最初の引数は小数点以下を切り捨てるので、10000 で割るだけで小数点以下の処理はしていません。

MOD 関数 は、1 つ目の引数を 2 つ目の引数で割った余りを返します。100 で割った余りで、整数部の下 2 桁を取得します。

image

データ型を「日付」に変更します。

 

LEFT 関数RIGHT 関数 を使用した例

列を追加し、次の式を入力します。(下線部が DATE 関数の 3 つの引数です。)

 日付 = DATE(LEFT([年月日],4), RIGHT(LEFT([年月日],6),2) , RIGHT([年月日],2))

DATE 関数の真ん中の引数 (太字部分) で月に相当する値を渡しますが、まず LEFT 関数で [年月日] 列の左から 6 文字を取得し (「20171101」⇒「201711」)、RIGHT 関数でさらにそこから右 2 文字を取得 (「201711」⇒「11」) しています。

image

データ型を「日付」に変更します。


最後に、カレンダーテーブルとリレーションを作成したら、混乱を避けるためカレンダーテーブル以外の日付列は非表示にしましょう。