2016-09-24 32 views
0

最近DAXの学習を開始しました。私はDATEADD関数を正しく理解できません。ブロー式がエラーを出しています。DAXのDATEADD関数に関する問題

DATEADD(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4,MONTH) 
A table expression containing more than one column was specified in the call to function 'DATEADD'. This is not supported. 

しかし、EDATE

EDATE(FIRSTNONBLANK(DATATABLE("TodaysDate",DATETIME,{{"9/24/2016"}}),TRUE()),4) 

とFIRSTDATEとその作業FIRSTNONBLANKのように動作していない、DATATABLEの使用に問題はありますか?私が見逃したことを教えてください。

FIRSTDATE(DATATABLE("Today1",DATETIME,{{"9/24/2016"}})) 
A table expression containing more than one column was specified in the call to function 'FIRSTDATE'. This is not supported. 

ありがとうございます。

答えて

7

DATEADD機能は、最初のパラメータとして、あなたはとてもそれがエラーの原因となっているテーブルを渡している日付が含まをとります。 1列の表を渡しても、列とは異なります。

FIRSTNONBLANKFIRSTDATE関数は、テーブルを渡すようテーブルは、それぞれ計算され、最初の値または日付の単一の列と単一の行を含む返します。

DATEADD関数に1行の1つの列を渡したとしても、DATEADDが計算された日付を返したので何も返さないので、計算された日付が返されます。戻るためのより多くの日付。

:あなたはと呼ばれる、計算列を作成するために DATEADDを使用する場合は、この表は MyDates

enter image description here

と呼ばれてい

:それはあなたのための明確でない場合は、どのようにDATEADD作品を理解するために、この例を考えます

4MonthsAfter = DATEADD(MyDates[Date],4,MONTH) 

返信:

カラムが 24/12/2016値が含まれていないので、あなたが日付 24/08/2016値の列を見ることができるように

enter image description here

には24/05/2017値が存在しないので、同じことが24/01/2017のために起こる、空白になっています。しかし24/09/2016の後の4ヶ月は24/01/2017が列にあるので計算されます。

ウェイDATEADDの作品はEDATEとはかなり違っています。 EDATEは、の日付(日付の表列ではない)を日時またはテキスト形式で受け取り、日付の前後に指定した月数を計算します。

本質的に、DATEADDは、Date/Calendarテーブル(日付ディメンション)で動作するように設計されたTime Intelligence functionsの大部分の最初のパラメータとして、日付のテーブル列を想定しています。

プログラミングのバックグラウンドから来た場合、DATEADDがDAXで動作する方法で混乱する可能性があります。通常DATEADDは、日付、間隔の数、および日付を計算するための特定の間隔(MONTH、DAY、YEAR、QUARTER)のみを必要とし、DAXでは最初のパラメータとして日付の明示的な列が必要です。

これが役立つかどうか教えてください。

参照:

DATEADD
FIRSTNONBLANK
FIRSTDATE
EDATE

+0

多くのおかげで、DATEADDにそんなに透明度は今、私は、データ・ウェアハウスの知識を持っているとDateDimensionに関連することができます。私はこれがDATEADDが時間インテリジェンス関数の下に置かれているが日付の時間関数の下に置かれていないと思う理由だと思う:) – Gokul

+0

なぜ列の代わりにテーブルを渡しているので3番目の式が機能しないのだろうか?しかし、そうであれば、FIRSTNONBLANKも動作すべきではありませんか? – Gokul

+1

@Gokul、 'FIRSTNONBLANK'最初のパラメータは、列、**テーブル**(あなたが渡すもの)、または単一列テーブルを定義するブール式になることができます。したがって、FIRSTNONBLANKは動作するはずですが、前に説明したようにDATEADD関数が評価されたときにエラーになるテーブルを返します。 –