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

日付関数で、データ ソース内で日付を操作することができます。

日付関数

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

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

DATE

認識可能な形式である限り、文字列および数値式を日付に変換する型変換関数。

構文 DATE(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_part) に、指定された期間を加算して、特定の日付を返します。例えば、開始日に 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])
出力 整数
定義 date1 と date2 の差を暦の単位 (date_part) で返します。例えば、バンドに入った日と抜けた日を引き算して、その人がバンドにいた期間を確認します。

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_part) を文字列として返します。
DATENAME('year', #3/25/1986#) = "1986"
DATENAME('month', #1986-03-25#) = "March"

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

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

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

逆関数は DATEPARSE で、文字列値を受け取り、それを日付としてフォーマットします。

DATEPARSE

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

構文 DATEPARSE(date_format, [date_string])
出力 日付
定義 date_format 引数は [文字列] フィールドがどのように配置されているかを示します。文字列フィールドはさまざまな順序で配置することができるため、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_part) を整数として返します。
DATEPART('year', #1986-03-25#) = 1986
DATEPART('month', #1986-03-25#) = 3

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

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

逆関数は DATEPARSE で、文字列値を受け取り、それを日付としてフォーマットします。

DATETRUNC

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

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

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

DATETRUNC(‘iso-week’, #9/22/2018#) = #9/17/2018#      

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

DATETRUNC(month, #9/22/2018#) = #9/1/2018#      

(2018/9/22 を含む月の最初の日)

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

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

DATETRUNC(‘week’, #9/22/2018#) = #1/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)
出力 整数
定義 指定された日付の日の部分を整数として返します。
Day(#September 22, 2018#) = 22
WEEK、MONTH、QUARTER、YEAR、および同等の ISO も参照してください。

ISDATE

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

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

MAKEDATE

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

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

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

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

MAKEDATETIME

構文 MAKEDATETIME(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)
出力 日時
定義 指定した時、分、秒から構成された日付値を返します。
MAKETIME(14, 52, 40) = #1/1/1899 14:52:40#

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

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

MAX

構文 MAX(expression) または MAX(expr1, expr2)
出力 日付 (注を参照)
定義 MAX は通常数値に適用されますが、日付でも使用できます。日付フィールドまたは 2 つの日付の最大値 (最近の日) を返します。
MAX(#Sept 22, 2018#, #Feb 20, 2021#) = #Feb 20, 2021#
MAX([Ship date])

MAX(expression) は集約関数として扱われ、単一の集約結果を返します。これは、viz で AGG([calculation name]) として表示され、日付の階層は持ちません。

MAX(expr1, expr2) は 2 つの値を比較し、行レベルの値を返します。日付の場合、その値は日付になり、結果は日付階層を保持します。

いずれかの引数が Null の場合は Null を返します。

MIN

構文 MIN(expression) または MIN(expr1, expr2)
出力 日付 (注を参照)
定義 MIN は通常数値に適用されますが、日付でも使用できます。日付フィールドまたは 2 つの日付の最小値 (最も古い日) を返します。
MIN(#Sept 22, 2018#, #Feb 20, 2021#) = #Sept 22, 2018#
MIN(Ship date])

MIN(expression) は集約関数として扱われ、単一の集約結果を返します。これは、viz で AGG([calculation name]) として表示され、日付の階層は持ちません。

MIN(expr1, expr2) は 2 つの値を比較し、行レベルの値を返します。日付の場合、その値は日付になり、結果は日付階層を保持します。

いずれかの引数が Null の場合は Null を返します。

MONTH

構文 MONTH(date)
出力 整数
定義 指定された日付の月の部分を整数として返します。
MONTH(#1986-03-25#) = 3
DAY、WEEK、QUARTER、YEAR、および同等の ISO も参照してください。

NOW

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

NOW は引数を取りません。

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

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

QUARTER

構文 QUARTER(date)
出力 整数
定義 指定された日付の四半期の部分を整数として返します。
QUARTER(#1986-03-25#) = 1
DAY、WEEK、MONTH、YEAR、および同等の ISO も参照してください。

TODAY

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

TODAY は引数を取りません。

日付の代わりに日時を返す同様の計算である NOW も参照してください。

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

WEEK

構文 WEEK(date)
出力 整数
定義 指定された日付の週の部分を整数として返します。
WEEK(#1986-03-25#) = 13
DAY、MONTH、QUARTER、YEAR、および同等の ISO も参照してください。

YEAR

構文 YEAR(date)
出力 整数
定義 指定された日付の年の部分を整数として返します。
YEAR(#1986-03-25#) = 1,986
DAY、WEEK、MONTH、QUARTER、および同等の ISO も参照してください。

ISOQUARTER

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

ISOWEEK

構文 ISOWEEK(date)
出力 整数
定義 指定された日付の ISO8601 週ベースの部分を整数として返します。
ISOWEEK(#1986-03-25#) = 13
ISOWEEKDAY、ISOQUARTER、ISOYEAR、および同等の非 ISO も参照してください。

ISOWEEKDAY

構文 ISOWEEKDAY(date)
出力 整数
定義 指定された日付の ISO8601 週ベースの曜日の部分を整数として返します。
ISOWEEKDAY(#1986-03-25#) = 2
ISOWEEK、ISOQUARTER、ISOYEAR、および同等の非 ISO も参照してください

ISOYEAR

構文 ISOYEAR(date)
出力 整数
定義 指定された日付の ISO8601 週ベースの年の部分を整数として返します。
ISOYEAR(#1986-03-25#) = 1,986
ISOWEEK、ISOWEEKDAY、ISOQUARTER、および同等の非 ISO も参照してください。

date_part 引数

Tableau の多くの日付関数は引数 date_part (暦の単位) を取ります。これは、日付のどの部分 (日、週、四半期など) を考慮するかを関数に伝える文字列定数です。

date_part に指定できる有効な値は次のとおりです。

date_part
'year' 4 桁の年
'quarter' 1-4
'month' 1 ~ 12 または "January" 、"February"など
'dayofyear' 年初来日数 (1 月 1 日は 1、2 月 1 日は 32 など)
'day' 1-31
'weekday' 1 ~ 7 または "Sunday"、"Monday"など
'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 で更新されます。

ありがとうございます!