DAX表達式中包含時間智能(Time Intelligence)相關的函數,用於對日期維度進行累加、同比和環比等分析。PowerBI可以建立關係,經過過濾器來對影響計算的上下文。html
DAX表達式有兩種方式計算累加和,TOTALxTD()是DATESxTD()的語法糖,使得PowerBI對累加和的計算更加簡單。express
全部的時間關係函數都包含一個特殊的dates參數,該參數有三種形式:函數
爲了應用時間關係,按照時間對數據分析,最好單首創建一個日期維度表,並和事實表建立 1 : N 的關聯,確保關係是活躍的。日期維度的粒度設置爲Day,確保日期維度表包括全部的日期數據。spa
DAX中有三個函數直接用於計算累加和,TOTALMTD是按當前月計算累加和、TOTALQTD是按當前季度計算累加和、TOTALYTD是按當前年份計算累加和:code
TOTALMTD(<expression>,<dates>[,<filter>]) TOTALQTD(<expression>,<dates>[,<filter>]) TOTALYTD(<expression>,<dates>[,<filter>][,<year_end_date>])
參數 expression是聚合標量值的表達式,dates是包含日期的字段,filter是過濾器,返回的是布爾值。htm
例如,計算當前的銷售額:blog
= TOTALMTD(SUM(InternetSales[SalesAmount]),DateTime[DateKey])
返回到當前的全部日期,參數dates是隻包含一個日期列的表格,函數從dates中取第一個日期做爲基準:文檔
DATESMTD(<dates>) DATESQTD(<dates>) DATESYTD(<dates> [,<year_end_date>])
DATESMTD()函數適用於日期維度,該日期維度必須具備連續的非重複日期,從指定數據的第一年的1月1日到去年12月31日,該函數返回一個單列表,該表由上下文中當前日期的月份的第一個月與上下文中的當前日期之間的日期組成。get
=CALCULATE(SUM(InternetSales[SalesAmount]), DATESMTD(DateTime[DateKey]))
函數PARALLELPERIOD用於計算平行時期,平行日期是指在參數dates上向前或向後移動多個時間間隔(intervals),該函數返回一個包含平行日期的表,使用該函數能夠用於計算同比:數據分析
PARALLELPERIOD(<dates>,<number_of_intervals>,<interval>)
參數註釋:
此函數獲取由dates指定的列中的當前日期集,將第一個日期和最後一個日期移動指定的間隔數,而後返回兩個移位日期之間的全部連續日期。 若是間隔是月,季度或年的部分範圍,則結果中的任何部分月份也將填寫以完成整個間隔。
例如,向前回滾12個月,把DateTime[DateKey]中的最小日期和最大日期移動指定的間隔數,而後返回兩個移位日期之間的全部連續日期,計算這些日期對應的銷量(Sales_Amount)。
CALCULATE([Sales_Amount]*1.1,PARALLELPERIOD(DateTime[DateKey],-12,MONTH))
在該示例中,CALCULATE的第二個參數是一個表格。
另外一個函數是SAMEPERIODLASTYEAR(),它是PARALLELPERIOD(DateTime[DateKey],-12,MONTH) 的包裝器:
SAMEPERIODLASTYEAR(<dates>)
函數 PREVIOUS+(DAY/MONTH/QUARTER/YEAR),是把指定的日期向前移動的函數,參數是一個包含日期的數據表,返回的是一個包含日期的數據表。
PREVIOUSDAY(<dates>) PREVIOUSMONTH(<dates>) PREVIOUSQUARTER(<dates>) PREVIOUSYEAR(<dates>[,<year_end_date>])
對於PREVIOUSMONTH()函數,該函數使用dates(輸入參數)中的第一個日期做爲基準,返回該日期上個月的全部日期。 例如,若是dates參數中的第一個日期指的是2009年6月10日,則此函數將返回2009年5月的全部日期。
=CALCULATE(SUM(InternetSales[SalesAmount]), PREVIOUSMONTH(Date[DateKey]))
參考文檔: