日付関数

日付は、多くのデータ ソースに共通する要素です。フィールドに認識可能な日付が含まれている場合、そのフィールドは日付または日時のデータ型になります。Viz で日付フィールドを使用すると、日付階層の自動ドリル ダウン、日付固有のフィルター オプション、特別な日付書式設定オプションなど、一連の特別な機能を利用することができます。計算で日付を使用するには、多くの場合、日付固有の関数を使用する必要があります。

他の日付の概念を理解する

日付関数は、date_part 引数、オプションの [start_of_week] パラメーター、日付リテラル (#) など、日付固有の要素を参照することがあります。これらについては、このトピックの最後で詳しく説明します。

日付関数の機能ではありませんが、他にも興味深いトピックがいくつかあります。

ヒント: 使用するフィールドはすでに日付として認識されていて ([データ] ペインに日付アイコンが表示されている)、Viz 内での表示方法を制御しようとしていますか? 日付関数を使用するのではなく、書式を設定する必要がある場合があります。たとえば、2024 年 9 月 22 日を 09/24 と表示したいとします。これは計算ではなく、日付の書式設定によって処理されます。

日付フィールドの操作については、カスタム日付形式と関連トピックを参照してください。このページの日付関数を使用すると、表示形式を設定するのではなく、日付計算のフィールドを操作することになります。

Tableau で利用可能な日付関数

DATE

文字列や数値の式を日付の型に変換する関数。式は、認識可能な形式である必要があります。

構文DATE(expression)
出力日付
定義指定された数値、文字列、または日付の <expression> に対して、日付を返します。
DATE([Employee Start Date])
DATE("September 22, 2018") 
DATE("9/22/2018")
DATE(#2018-09-22 14:52#)

DATEPARSE とは異なり、DATE は多くの標準的な日付形式を自動的に認識するため、パターンを指定する必要はありません。ただし、DATE が入力を認識しない場合は、DATEPARSE を使用して形式を指定してみてください。

MAKEDATE も同様の関数ですが、MAKEDATE は年、月、日の数値を入力する必要があります。

DATEADD

日付部分 (月、日など) に指定された期間を開始日に加えます。

構文DATEADD(date_part, interval, date)
出力日付
定義指定された <date> の指定された <date_part> に、<interval> で指定された数値を追加した日付を返します。例えば、開始日に 3 か月を足したり、12 日間を足したりするなどです。

すべての締め切り日を 1 週間延長する

DATEADD('week', 1, [due date])

2021 年 2 月 20 日の 280 日後

DATEADD('day', 280, #2/20/21#) = #November 27, 2021#
ISO 8601 の日付をサポートしています。

DATEDIFF

2 つの日付の差を日付部分 (週、年など) の数で返します。

構文DATEDIFF(date_part, date1, date2, [start_of_week])
出力整数
定義<date_part> の単位で表された、<date1><date2> の差異を返します。例えば、バンドに入った日と抜けた日を引き算して、その人がバンドにいた期間を確認します。

1986 年 3 月 25 日と 2021 年 2 月 20 日の間の日数

DATEDIFF('day', #3/25/1986#, #2/20/2021#) = 12,751

その人がバンドに参加していた月数

DATEDIFF('month', [date joined band], [date left band])
ISO 8601 の日付をサポートしています。

DATENAME

指定された日付部分の名前を、個別の文字列として返します。

構文DATENAME(date_part, date, [start_of_week])
出力文字列
定義<date><date_part> を文字列として返します。
DATENAME('year', #3/25/1986#) = "1986"
DATENAME('month', #1986-03-25#) = "March"

ISO 8601 の日付をサポートしています。

よく似た計算に DATEPART があります。これは、指定された日付部分の値を、連続した整数として返します。DATEPART は数値演算であるため、より高速に処理できます。

計算結果の属性 (ディメンションかメジャーか、連続か不連続か) と日付の書式を変更すると、DATEPARTDATENAME の結果は同じ書式にできます。

逆関数 DATEPARSE は、文字列値を受け取り、日付として書式設定します。

DATEPARSE

特別にフォーマットされた文字列を日付として返します。

構文DATEPARSE(date_format, date_string)
出力日付
定義<date_format> 引数は <date_string> フィールドがどのように配置されているかを示します。文字列フィールドはさまざまな順序で配置することができるため、<date_format> は正確に一致する必要があります。完全な説明と書式設定の詳細については、「フィールドを日付フィールドに変換する」(新しいウィンドウでリンクが開く)を参照してください。
DATEPARSE('yyyy-MM-dd', "1986-03-25") = #March 25, 1986#

DATE は、多くの標準的な日付形式を自動的に認識する類似の関数です。DATE で入力パターンを認識できない場合は、DATEPARSE の方が適している可能性があります。

MAKEDATE も同様の関数ですが、MAKEDATE は年、月、日の数値を入力する必要があります。

日付を分解して日付部分の値を返す逆関数は、DATEPART (整数出力) と DATENAME (文字列出力) です。

データベースの制限

DATEPARSE は次のコネクタで利用できます。レガシーでない Excel とテキスト ファイルの接続、Amazon EMR Hadoop Hive、Cloudera Hadoop、Google スプレッドシート、Hortonworks Hadoop Hive、MapR Hadoop Hive、MySQL、Oracle、PostgreSQL、および Tableau 抽出。書式設定によってはすべての接続で使用できない場合があります。

DATEPARSE は Hive バリアントではサポートされていません。サポートされているのは、Denodo、Drill、Snowflake のみです。

DATEPART

指定された日付部分の名前を、整数として返します。

構文DATEPART(date_part, date, [start_of_week])
出力整数
定義<date><date_part> を整数として返します。
DATEPART('year', #1986-03-25#) = 1986
DATEPART('month', #1986-03-25#) = 3

ISO 8601 の日付をサポートしています。

よく似た計算に DATENAME があります。これは、指定された日付部分の名前を、個別の文字列として返します。DATEPART は数値演算であるため、より高速に処理できます。フィールドの属性 (ディメンションかメジャーか、連続か不連続か) と日付の書式を変更すると、DATEPARTDATENAME の結果は同じ書式にできます。

逆関数 DATEPARSE は、文字列値を受け取り、日付として書式設定します。

DATETRUNC

この関数は、日付の丸め機能と考えることができます。特定の日付を受け取り、希望する特別な条件でその日付の変化形を返します。すべての日付には、日、月、四半期、および年の値が必ずあるため、DATETRUNC は、指定された日付部分までの各日付部分に最小値を設定します。詳細については、例を参照してください。

構文DATETRUNC(date_part, date, [start_of_week])
出力日付
定義<date_part> で指定された精度で <date> を切り捨てます。この関数は新しい日付を返します。たとえば、月の中旬にある日付を月レベルで丸めた場合、この関数はその月の第 1 日を返します。
DATETRUNC('day', #9/22/2018#) = #9/22/2018#
DATETRUNC('iso-week', #9/22/2018#) = #9/17/2018#

(2018/9/22 を含む週の月曜日)

DATETRUNC(quarter, #9/22/2018#) = #7/1/2018# 

(2018/9/22 を含む四半期の最初の日)

注: 週と ISO 週では、start_of_week が影響します。ISO 週の始まりは、常に月曜日です。この例のロケールでは、 start_of_week が指定されていない場合、週の始まりは日曜日になります。

ISO 8601 の日付をサポートしています。

DATETRUNC は、たとえば、Viz の日時フィールドの時刻の表示を停止するためなどに使用しないでください。日付の表示を切り捨てたい場合は、日付の精度を丸めるのではなく、書式を調整(新しいウィンドウでリンクが開く)してください。

例えば、DATETRUNC('day', #5/17/2022 3:12:48 PM#) は、viz で秒まで表示される書式設定の場合、5/17/2022 12:00:00 AM と表示されます。値は日に切り捨てられますが、表示は秒になります。

DAY

日付の日の部分 (1 ~ 31) を整数として返します。

構文DAY(date)
出力整数
定義指定された <date> の日の部分を整数として返します。
Day(#September 22, 2018#) = 22
WEEKMONTHQUARTERYEAR、および ISO の相当するものも参照してください。

ISDATE

文字列が有効な日付形式かどうかを確認します。

構文ISDATE(string)
出力ブール値
定義指定された <string> が有効な日付の場合、true を返します。
ISDATE(09/22/2018) = true
ISDATE(22SEP18) = false
必須の引数は文字列でなければなりません。ISDATE は、日付データ型のフィールドには使用できません。計算によりエラーが返されます。

ISOQUARTER

構文ISOQUARTER(date)
出力整数
定義指定された <date> の ISO8601 週ベースの四半期の部分を整数として返します。
ISOQUARTER(#1986-03-25#) = 1
ISOWEEKISOWEEKDAYISOYEAR、および非 ISO の相当するものも参照してください。

ISOWEEK

構文ISOWEEK(date)
出力整数
定義指定された <date> の ISO8601 週ベースの週を整数で返します。
ISOWEEK(#1986-03-25#) = 13
ISOWEEKDAYISOQUARTERISOYEAR、および非 ISO の相当するものも参照してください。

ISOWEEKDAY

構文ISOWEEKDAY(date)
出力整数
定義指定された <date> の ISO8601 週ベースの曜日を整数で返します。
ISOWEEKDAY(#1986-03-25#) = 2
ISOWEEKISOQUARTERISOYEAR、および非 ISO の相当するものも参照してください。

ISOYEAR

構文ISOYEAR(date)
出力整数
定義指定された <date> の ISO8601 週ベースの年を整数で返します。
ISOYEAR(#1986-03-25#) = 1,986
ISOWEEKISOWEEKDAYISOQUARTER、および非 ISO の相当するものも参照してください。

MAKEDATE

構文MAKEDATE(year, month, day)
出力日付
定義指定された <year><month><day> から構成される日付値を返します。
MAKEDATE(1986,3,25) = #1986-03-25#

: 値を誤って入力した場合、4 月 31 日は存在しないというエラーが返されるのではなく、MAKEDATE(2020,4,31) = May 1, 2020 のように日付が調整されます。

Tableau のデータ抽出で利用できます。他のデータ ソースで利用可能か確認します。

MAKEDATE では、各日付部分に数値を入力する必要があります。日付であるはずのデータが文字列の場合は、DATE 関数を試してください。DATE は、多くの標準的な日付形式を自動的に認識します。DATE が入力を認識しない場合は、DATEPARSE を使用してみてください。

MAKEDATETIME

構文MAKEDATETIME(date, time)
出力日時
定義<date><time> を組み合わせた日付時刻を返します。日付は、日付、日付時刻、または文字列の種類になることがあります。時刻は日付時刻である必要があります。
MAKEDATETIME("1899-12-30", #07:59:00#) = #12/30/1899 7:59:00 AM#
MAKEDATETIME([Date], [Time]) = #1/1/2001 6:00:00 AM#

この関数は、MySQL 互換の接続 (Tableau では MySQL および Amazon Aurora) でのみ使用できます。

MAKETIME は、Tableau データ抽出およびその他のデータ ソースで使用できる類似の関数です。

MAKETIME

構文MAKETIME(hour, minute, second)
出力日時
定義指定された <hour><minute><second> から構成される日付値を返します。
MAKETIME(14, 52, 40) = #1/1/1899 14:52:40#

Tableau は時刻のデータ型をサポートしておらず、日付時刻のみをサポートしているため、出力は日付時刻になります。フィールドの日付部分は 1899 年 1 月 1 日になります。

MYSQL 互換の接続でのみ使用できる MAKEDATETIME に類似の関数です。

MAX

構文MAX(expression) または MAX(expr1, expr2)
出力引数と同じデータ型、または引数の一部が Null の場合 NULL
定義

2 つの引数の最大値を返します (2 つの引数は同じ型でなければなりません)。

MAX は集計として単一フィールドにも適用できます。

MAX(4,7) = 7
MAX(#3/25/1986#, #2/20/2021#) = #2/20/2021#
MAX([Name]) = "Zander"

文字列の場合

MAX は、通常、アルファベット順で最後に来る値です。

データベースのデータ ソースでは、MAX の文字列値は、その列でデータベースが定義しているソート順が最も高い値です。

日付の場合

日付の場合、MAX は最新の日付です。MAX が集計の場合、結果には日付の階層がありません。MAX が比較の場合、結果には日付の階層が保持されます。

集計として

MAX(expression) は集計関数であり、集計された単一の結果を返します。Viz では AGG(expression) と表示されます。

比較として

MAX(expr1, expr2) は 2 つの値を比較し、行レベルの値を返します。

MIN も参照してください。

MIN

構文MIN(expression) または MIN(expr1, expr2)
出力引数と同じデータ型、または引数の一部が Null の場合 NULL 
定義

2 つの引数の最小値を返します (2 つの引数は同じ型でなければなりません)。

MIN は集計として単一フィールドにも適用できます。

MIN(4,7) = 4
MIN(#3/25/1986#, #2/20/2021#) = #3/25/1986#
MIN([Name]) = "Abebi"

文字列の場合

MIN は、通常、アルファベット順で最初に来る値です。

データベースのデータ ソースでは、MIN の文字列値は、その列でデータベースが定義しているソート順が最も低い値です。

日付の場合

日付の場合、MIN は最も早い日付です。MIN が集計の場合、結果には日付の階層がありません。MIN が比較の場合、結果には日付の階層が保持されます。

集計として

MIN(expression) は集計関数であり、集計された単一の結果を返します。Viz では AGG(expression) と表示されます。

比較として

MIN(expr1, expr2) は 2 つの値を比較し、行レベルの値を返します。

MAX も参照してください。

MONTH

構文MONTH(date)
出力整数
定義指定された <date> の月を整数で返します。
MONTH(#1986-03-25#) = 3
DAYWEEKQUARTERYEAR、および ISO の相当するものも参照してください。

NOW

構文NOW()
出力日時
定義現在のローカル システムの日付と時刻を返します。
NOW() = 1986-03-25 1:08:21 PM

NOW は引数を取りません。

日付時刻でなく日付を返す同様の計算である TODAY も参照してください。

データ ソースがライブ接続の場合、システムの日付と時刻は別のタイムゾーンになる可能性があります。これに対処する方法の詳細については、「ナレッジベース」を参照してください。

QUARTER

構文QUARTER(date)
出力整数
定義指定された <date> の四半期を整数で返します。
QUARTER(#1986-03-25#) = 1
DAYWEEKMONTHYEAR、および ISO の相当するものも参照してください。

TODAY

構文TODAY()
出力日付
定義現在のローカル システムの日付を返します。
TODAY() = 1986-03-25

TODAY は引数を取りません。

日付ではなく日付時刻を返す同様の計算である NOW も参照してください。

データ ソースがライブ接続の場合、システムの日付は別のタイムゾーンになる可能性があります。これに対処する方法の詳細については、「ナレッジベース」を参照してください。

WEEK

構文WEEK(date)
出力整数
定義指定された <date> の週を整数で返します。
WEEK(#1986-03-25#) = 13
DAYMONTHQUARTERYEAR、および ISO の相当するものも参照してください。

YEAR

構文YEAR(date)
出力整数
定義指定された <date> の年を整数で返します。
YEAR(#1986-03-25#) = 1,986
DAYWEEKMONTHQUARTER、および ISO の相当するものも参照してください。

date_part

Tableau の多くの日付関数は引数 date_part を取ります。これは、日付のどの部分 (日、週、四半期など) を考慮するかを関数に伝える文字列定数です。使用できる有効な date_part の値は次のとおりです。

date_part
'year'4 桁の年
'quarter'1 ~ 4
'month'1 ~ 12 または "1 月"、"2 月" など
'dayofyear'年初来日数 (1 月 1 日は 1、2 月 1 日は 32 など)
'day'1 ~ 31
'weekday'1 ~ 7 または "日曜日"、"月曜日" など
'week'1 ~ 52
'hour'0 ~ 23
'minute'0 ~ 59
'second'0 ~ 60
'iso-year'ISO 8601 の 4 桁の年
'iso-quarter'1 ~ 4
'iso-week'1 ~ 52、週の開始は常に月曜日
'iso-weekday'1 ~ 7、週の開始は常に月曜日

[start_of_week] パラメーター

一部の関数には、オプションのパラメーター [start_of_week] があります。start_of_week パラメーターを使用すると、「日曜日」か「月曜日」かなど、どの日を週の最初の日と見なすかを指定できます。省略すると、週の始まりはデータ ソースによって決定されます。データ ソースの日付のプロパティを参照してください。

以下の例では、9 月 22 日が日曜日で、9 月 24 日が火曜日です。DATEDIFF 関数は、これらの日付の間の週数を計算するために使用されています。

DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'monday') = 1

  • start_of_week は「月曜日」であるため、これらの日付は異なる週になります。

DATEDIFF('week', #2013-09-22#, #2013-09-24#, 'sunday') = 0

  • start_of_week は「日曜日」であるため、これらの日付は同じ週になります。

日付リテラル (#)

例では、シャープ記号 (#) を日付式で使用することがよくあります。これは、テキスト文字列に引用符を使用するのと同様の日付リテラルであり、記号に囲まれた値が日付であることを Tableau に伝えます。

日付リテラルがない場合、日付は他のさまざまなデータ型として解釈される可能性があります。例:

形式データ型
'March 25, 1986'文字列'March 25, 1986'
#1986/03/25#日付#1986/03/25#
#1986/03/25#浮動小数0.00006042
#1986/03/25#整数1,958
March 25, 1986 無効

詳細については、「リテラル式の構文」を参照してください。

日付計算の作成

Superstore サンプル データ ソースを使用して、日付計算の作成を練習します。

  1. Tableau Desktop で、Tableau に付属の "Sample-Superstore (サンプル - スーパーストア)" 保存したデータ ソースに接続します。
  2. ワークシートを開きます。
  3. [データ] ペインの [ディメンション] から、"Order Date (注文日)"[行] シェルフまでドラッグします。
  4. [行] シェルフで、[YEAR(Order Date)] フィールド上のプラス (+) アイコンをクリックします。

    "QUARTER(Order Date)" が [行] シェルフとに追加され、ビューが更新されます。

  5. [行] シェルフで、[QUARTER(Order Date)] フィールド上のプラス (+) アイコンをクリックし、[MONTH(Order Date)] にドリルダウンします。

  6. [分析] > [計算フィールドの作成] を選択します。
  7. 開いた計算エディターで、次の操作を実行します。
    • 計算フィールドに "Quarter Date" と名前を付けます。
    • 次の式を入力します。DATETRUNC('quarter', [Order Date])
    • 終了したら、[OK] をクリックします。

      新しい日付計算フィールドは、[データ] ペインの [ディメンション] に表示されます。他のフィールドと同様に、このフィールドを 1 つ以上のビジュアライゼーションで使用できます。

  8. [データ] ペインの [ディメンション] から、"Quarter Date"[行] シェルフにドラッグして、"MONTH(Order Date)" の右に配置します。視覚化が、年の値で更新されます。これは、Tableau が日付データを最も高い詳細レベルで動かしているためです。
  9. [行] シェルフで YEAR(Quarter Date) を右クリックし、[正確な日付] を選択します。
  10. [行] シェルフで YEAR(Quarter Date) をもう一度右クリックし、[不連続] を選択します。

    視覚化は、表の各行の正確な quarter date で更新されます。

フィードバックをお送りいただき、ありがとうございます。フィードバックは正常に送信されました。ありがとうございます!