【DAX】FORMAT() — 日付をカスタム定義のテキスト型に変更する

DAX関数

このページはDAX関数をサイト主がよく使う例をあげながら使い方を解説します。
多様な使い方など深くは解説しません。あくまでも、最頻の使い方や抑えておきたいポイントを記しています!

用途

日付をカスタム定義のテキスト型にしたいときに使います。

前提条件

変更前のデータのデータ型を”日付”にしておく必要があります。
※スクショはPowerBIの画面です。

構文

=FORMAT(<列名>,”カスタム定義”)

カスタム定義の例
※<列名>は、[日付]がはいり、「2023年10月31日」(データ型:日付)の1レコードがはいっています。

カスタム定義戻り値
yyyyMMdd20231031
yyyyMM202310

新しい列[年度]を追加して、[日付]に対する年度を表示させます。

  1. 月が1月、2月、3月だった時、年を-1にすれば年度を表示できます。
    IF文を使って年度を表示させます。
    = IF(FORMAT([日付],”mm”)IN{“01″,”02″,”03”},正の値,負の値)
  2. 正の値は、年を-1にした値をいれたいのですが FORMAT([日付],”yyyy”)-1ではエラーとなります。
    FORMATの戻り値はテキスト型になので、文字列から数値型に変換しておく必要があるためです。
    FORMATをVALUEで囲い、VALUE(FORMAT([日付],”yyyy”)-1)としておくと良いでしょう。
  3. 負の値は、年をそのまま表示させた値をいれます。FORMAT([日付],”yyyy”)としたいところですが、これもエラーになってしまいます。
    実はIF文の戻り値はバリアント型ではないため、正の値と負の値どちらの戻り値もデータ型を揃えておく必要があります。
    正の値の戻り値が数値型だったため、負の値も数値型に揃えておきましょう。
    VALUE(FORMAT([日付],”yyyy”)
  4. 1~3を踏まえ、下記の数式になります。
= IF(FORMAT([日付],"mm")IN{"01","02","03"},VALUE(FORMAT([日付],"yyyy")-1),VALUE(FORMAT([日付],"yyyy")))

余談

  • FORMATで年度を表示させる他、データに年月を持たせて(FORMAT([日付),”yyyymm”)の列を作る)おいて、その年月ごとに集計するやり方をよくやります。
    ※年月ごとの合計金額とか、人数カウントなどなど
  • ”mm”について、大文字or小文字で意味合いが違うことがあります。
    Analysis Serviceなど他データモデルでは、大文字(“MM”)だと1月など1桁月は頭に0がつきますが、小文字(“mm”)は頭に0がつかないことがあります。
    特に理由がない限りは、その辺がごチャラないよう、大文字で私は統一しています。