手記
この関数は、意味のない結果を返す可能性があるため、視覚的な計算
入力が日付列の場合は、現在のコンテキストの日付から指定された間隔だけ前後にシフトされた日付の列を含むテーブルを返します。
入力がカレンダーの場合、関数は現在のコンテキストに基づいて、指定された間隔で前後にシフトした日付を返します。 出力には、主要なタグ付けされた列と時間関連の列が含まれます。
構文
DATEADD(<dates> or <calendar>, <number_of_intervals>, <interval>[,<Extension>],[,<Truncation>])
パラメーター
| 用語 | 定義 |
|---|---|
dates or calendar |
日付またはカレンダー参照を含む列。 |
number_of_intervals |
日付に加算または減算する間隔の数を指定する整数。 |
interval |
日付をシフトする間隔。 間隔の値には、 year、 quarter、 month、 week、 dayのいずれかを指定できます。 週の列挙型は、カレンダー参照が指定されている場合にのみ適用されます。 |
extension |
カレンダー参照が指定されている場合にのみ適用されます。 元の期間の日付が結果の期間よりも少ない場合の動作を定義します。 有効な値は、EXTENDING (既定値)、PRECISE、ENDALIGNED です。 |
truncation |
カレンダー参照が指定されている場合にのみ適用されます。 元の期間の日付が結果の期間よりも多い場合の動作を定義します。 有効な値は、BLANKS (既定値)、ANCHORED です。 |
戻り値
日付列入力の場合、日付値の単一列を含むテーブル。
カレンダー入力の場合、現在のコンテキストで、シフトされた期間のすべての主要なタグ付けされた列と時間関連の列を含むテーブル。
備考
dates 引数には、次のいずれかを指定できます。
日付/時刻列への参照。
日付/時刻値の単一列を返すテーブル式。
日付/時刻値の単一列テーブルを定義するブール式。
手記
ブール式に対する制約については、関数
トピックで説明します。 number_of_intervalsに指定された数値が正の場合、datesの日付は時間内に移動されます。数値が負の場合、datesの日付は時間単位でシフトされます。intervalパラメーターは列挙体であり、文字列のセットではありません。したがって、値を引用符で囲む必要はありません。 また、year、quarter、month、dayの値は、それらを使用するときに完全にスペルする必要があります。結果テーブルには、
dates列に存在する日付のみが含まれます。日付列の構文が使用され、現在のコンテキストの日付が連続した間隔を形成しない場合、関数はエラーを返します。
この関数は、計算列または行レベル セキュリティ (RLS) 規則で使用する場合、DirectQuery モードでは使用できません。
例 - 日付のセットをシフトする
次の数式は、現在のコンテキストの日付の 1 年前の日付を計算します。
= DATEADD ( DateTime[DateKey], -1, YEAR )
カレンダー ベースのタイム インテリジェンスの例
次の数式は、現在のコンテキストの日付から 1 年前にシフトされた日付のテーブルを返します。
DATEADD ( FiscalCalendar, -1, YEAR )
入力が日付列の場合の特別な動作
選択に過去 2 日間の月が含まれる場合、 DATEADD は "拡張" セマンティクスを使用し、月末までの日数を含めます。 たとえば、2013 年 2 月 27 日と 28 日を選択に含め、月を追加すると、DATEADD は 3 月 27 日から 31 日に戻ります。
この動作は、過去 2 日間の月が選択範囲に含まれている場合にのみ発生します。 2 月 27 日のみが選択されている場合は、3 月 27 日に移動します。
= DATEADD(DateTime[DateKey], 1, month)
カレンダー ベースのタイム インテリジェンスでは、"Extension" と "Truncation" という 2 つの省略可能なパラメーターを使用して、より多くの制御が提供されます。 詳細については、上記のパラメーターの説明を参照してください。
選択がシフト レベルよりも細かい場合のカレンダー ベースの DateAdd の動作
カレンダー参照を使用し、選択がシフト レベルよりも細かい場合は、インデックスベースのアプローチが採用されます。 この動作を説明するために、選択が日付レベルで、 DATEADD() が月単位でシフトするシナリオを考えてみましょう。 DateAdd の実行内容を次に示します。
月内の現在の選択範囲の位置を決定します。
たとえば、現在の選択範囲が 3 月 3 日から 10 日の場合、その位置は月の 3 日から 10 日になります。月のシフト 月シフトを適用します。たとえば、+1 のシフトは 3 月から 4 月に変更されます。
シフトされた月の同じ相対位置を返します。新しい月の 3 番目から 10 日 (例: 4 月 3 日から 10 日) を取得します。
選択がシフト レベルよりも細かい粒度にある場合のカレンダー ベースの DateAdd のパラメーター
選択の粒度がシフト単位よりも 細かい 場合 (たとえば、月単位でシフトしながら個々の日付を選択する場合)、 インデックスベースの動作 は、特にさまざまな長さの数か月にわたって あいまいさにつながる可能性があります。 これらのエッジ ケースを処理するために、次の 2 つのパラメーターが導入されています。
拡張パラメーター (小さな→の大きな期間のシフトの場合):
変換先の期間が現在の期間より 長い 場合の関数の動作を制御します。 例として 1 か月先に進むを使用します。
Precise: 元の日付範囲を厳密に保持します。
→Feb 25–28→March 25–28Extending: 必要に応じて、期間 の終わりに 向かってウィンドウを拡張できます。
→Feb 25–28→March 25–31EndAligned: 選択範囲がその期間の終わりに達したときに、終了日を宛先期間の終わりに合わせます。それ以外の場合は、相対位置が保持されます。
→Feb 28→March 31、Feb 27→March 27
切り捨てパラメーター (大きい→小さい期間のシフトの場合)
変換先の月が現在の月よりも 短い 場合の関数の動作を制御します。 例として、1 か月後の移動を使用します。
Anchored: 結果を、より小さい期間の 最後の有効な日付 に固定します。
→March 31→Feb 28Blanks: シフトされた日付が存在しない場合は 空白 を返します。
→March 31→ (空白) (2 月には 31 日がないため)
クラシックタイムインテリジェンスとカレンダータイムインテリジェンスの動作の違い
一部のシナリオでは、クラシックタイムインテリジェンスとカレンダータイムインテリジェンスを比較すると、異なる結果が得られる場合があります。 たとえば、旧暦では、SamePeriodLastYear は日付の粒度で異なる結果を生成します。 カレンダーベースのタイム インテリジェンスでは、2008 年 2 月 29 日を 1 年前に戻した場合、2007 年 3 月 1 日が 60 日として扱われるためです。 クラシック タイム インテリジェンスでは、同じシフトが 2007 年 2 月 28 日に返されます。 回避策は、 DATEADD(Calendar, -<number of a year>, month) を使用することです。 たとえば、年のカレンダーが 13 か月の場合は、 DATEADD (カレンダー、-13、月) を使用します。 このアプローチは月単位でシフトするため、2008 年 2 月は 2007 年 2 月に移行します。