DAX Patterns | 關(guān)于時間的標(biāo)準(zhǔn)計算

關(guān)于這個模式

在這個模式中在扰,我們將向你展示如何使用標(biāo)準(zhǔn)日歷計算與時間相關(guān)的計算课锌,如年初至今、去年同期和百分比增長膳汪。使用標(biāo)準(zhǔn)日歷的最大優(yōu)點是:你可以依賴多個內(nèi)置的時間智能函數(shù)。內(nèi)置函數(shù)的設(shè)計方式是為最常見的需求提供正確的結(jié)果九秀。
?如果內(nèi)置函數(shù)無法滿足你的需求遗嗽,或者你正在使用一個非標(biāo)準(zhǔn)的日歷,那么你應(yīng)該使用常規(guī)的(與時間無關(guān)的)DAX函數(shù)來達(dá)到相同的目標(biāo)颤霎。通過這種方式媳谁,你可以隨意定制代碼的結(jié)果涂滴。也就是說友酱,如果你需要自定義計算,那么還需要使用一組列來豐富你的日期表柔纵,這些列將被DAX公式用于移動篩選器缔杉。這些自定義計算將在自定義時間相關(guān)的計算模式中進(jìn)行介紹。
?如果你使用的是常規(guī)的公歷搁料,那么此模式中的公式是產(chǎn)生時間智能計算的最簡單和最有效的方法或详。請記住,標(biāo)準(zhǔn)的DAX時間智能函數(shù)只支持常規(guī)的公歷——即一年由12月組成郭计,每個月包含它的公歷天數(shù)(28~31天)霸琴,三個月組成一個季度,以及我們所習(xí)慣的日歷的所有常規(guī)方面昭伸。

介紹時間智能計算

為了使用任何時間智能計算梧乘,你需要一個格式良好的日期表。日期表必須滿足以下要求:

  • 包含所需年份的所有日期庐杨。日期表必須從1月1日開始选调,到12月31日結(jié)束,并包含這個范圍內(nèi)的所有天數(shù)灵份。如果報告只引用財年仁堪,那么日期表必須包括從財年的第一天到最后一天的所有日期。例如:如果2008財年從2007年7月1日開始填渠,那么日期表必須包含從2007年7月1日到2008年6月30日的所有天數(shù)弦聂。
  • 需要有一個具有DateTimeDate 數(shù)據(jù)類型并且包含唯一值的列鸟辅。通常這一列命名為Date。雖然Date 列經(jīng)常被用于定義與其他表之間的關(guān)系莺葫,但這不是必需的剔桨。盡管如此,Date 列必須包含唯一的值徙融,并且應(yīng)該由“標(biāo)記為日期表”特性引用洒缀。如果該列還包含時間部分,則不應(yīng)該使用時間——例如欺冀,時間應(yīng)該始終是12:00 am树绩。
  • Date 表必須在模型中標(biāo)記為日期表,以防Date 表和其他表之間的關(guān)系(例如示例中的Sales 表)不是基于日期列隐轩。

?有幾種不同方法可以構(gòu)建Date 表饺饭。只要日期表滿足以上要求,構(gòu)建Date 表的方式并不影響使用標(biāo)準(zhǔn)時間智能計算的方式职车。如果你已經(jīng)有一個適用于你的報告的Date 表瘫俊,只需導(dǎo)入它并在檢查它滿足最低要求之后將其標(biāo)記為日期表。如果你沒有Date 表悴灵,可以使用稍后描述的DAX計算表創(chuàng)建一個扛芽。
?最佳實踐是: 將用于時間智能計算的Date 表標(biāo)記為日期表。每次在Date 列上應(yīng)用一個篩選器時积瞒,"標(biāo)記為日期表"設(shè)置都會對日期表自動添加REMOVEFILTERS川尖。這個操作(在Date列上應(yīng)用一個篩選器)是由作為CALCULATE的篩選參數(shù)的時間智能函數(shù)執(zhí)行。如果你使用Date 列定義了SalesDate 之間的關(guān)系茫孔,DAX會表現(xiàn)出相同的行為叮喳。盡管如此,將"標(biāo)記為日期表"設(shè)置應(yīng)用于日期表是一個最佳實踐缰贝。如果你有多個日期表馍悟,你可以將所有日期表標(biāo)記為日期表。
?如果沒有使用"標(biāo)記為日期表"設(shè)置并且沒有使用日期列定義關(guān)系剩晴,那么每當(dāng)在CALCULATE中使用時間智能函數(shù)時锣咒,都必須對日期表添加REMOVEFILTERS。關(guān)于這個行為的更多細(xì)節(jié)請瀏覽Power BI Desktop中的時間智能李破。

什么是標(biāo)準(zhǔn)的DAX時間智能函數(shù)?

標(biāo)準(zhǔn)的時間智能函數(shù)是表函數(shù)宠哄,它返回一列用于作為CALCULATE的篩選參數(shù)的日期值∴凸ィ可以通過編寫一個比較復(fù)雜的篩選表達(dá)式來獲得和時間智能函數(shù)相同的結(jié)果毛嫉。例如,DATESYTD 函數(shù)返回從同一年中的第一天到當(dāng)前篩選上下文中可見的最后一天之間的所有日期妇菱。

DATESYTD ( 'Date'[Date] )

?等同于下面的FILTER表達(dá)式:

VAR LastDateAvailable = MAX ( 'Date'[Date] )
VAR FirstJanuaryOfLastDate = DATE ( YEAR ( LastDateAvailable ), 1, 1 )
RETURN
    FILTER (
        ALL ( 'Date'[Date] ),
        AND (
            'Date'[Date] >= FirstJanuaryOfLastDate,
            'Date'[Date] <= LastDateAvailable
        )
    )

?有很多時間智能函數(shù)承粤,我們將在這個模式中呈現(xiàn)它們中的大部分暴区。請注意:時間智能函數(shù)應(yīng)該作為CALCULATE的篩選參數(shù),并且有時你將借助變量來實現(xiàn)這一點辛臊。在迭代函數(shù)中使用時間智能函數(shù)是危險的仙粱,因為會觸發(fā)隱式的上下文轉(zhuǎn)換, 并且從轉(zhuǎn)換而來的篩選上下文中檢索可見的日期。關(guān)于這個行為的更多細(xì)節(jié)請瀏覽DAX Guide文檔: https://dax.guide/datesytd/彻舰。
?以下是使用時間智能函數(shù)的最佳實踐的快速指南:

  • 僅在CALCULATE / CALCULATETABLE的篩選器參數(shù)中使用像DATESYTD這樣的時間智能函數(shù)伐割,或者使用時間智能函數(shù)將篩選器分配于變量。
  • 在返回值的DAX表達(dá)式中使用標(biāo)量函數(shù)—也稱為標(biāo)量表達(dá)式刃唤,如EDATEEOMONTH隔心。這些函數(shù)不是時間智能函數(shù),可以在行上下文中計值的表達(dá)式中使用尚胞。
  • 使用CONVERT將日期轉(zhuǎn)換為數(shù)字硬霍,反之亦然。
  • 請瀏覽https://dax.guide/獲得有關(guān)時間智能函數(shù)的最新完整清單笼裳。

?DAX初學(xué)者經(jīng)澄簦混淆時間智能函數(shù)和正則標(biāo)量時間函數(shù)。這種混淆會導(dǎo)致一些常見的錯誤躬柬,可以通過遵循以下建議來避免:

  • 不要使用DATEADD返回前一天或第二天拜轨,你可以使用簡單的數(shù)學(xué)運(yùn)算符實現(xiàn)。
  • 不要在標(biāo)量表達(dá)式中使用PREVIOUSDAY計算前一天楔脯。你只需從日期上減去一天撩轰,就可以在標(biāo)量表達(dá)式中獲取前一天。
  • 不要使用EOMONTH作為篩選器參數(shù)昧廷,而要使用ENDOFMONTHEOMONTH是一個標(biāo)量表達(dá)式偎箫。ENDOFMONTH是一個時間智能函數(shù)木柬。始終要注意函數(shù)的返回類型:只有表函數(shù)是時間智能函數(shù),并且不應(yīng)該在標(biāo)量表達(dá)式中使用時間智能函數(shù)淹办。

禁用自動日期/時間

Power BI自動為模型中的每個日期或日期時間類型的列創(chuàng)建一個日期表眉枕。然而, 我們
我們強(qiáng)烈建議禁用Power BI自動創(chuàng)建的日期表
,并取而代之怜森,導(dǎo)入或創(chuàng)建一個顯式的日期表速挑。關(guān)于這一建議的更多細(xì)節(jié)請瀏覽文章Automatic time intelligence in Power BI
?自動日期表的存在還啟用了一種被稱為列變體的特殊語法副硅。它表現(xiàn)為: 在日期列后有一個點姥宝,后面再跟著一個自動創(chuàng)建的日期表中的列。

Sales[Order Date].[Date]

?當(dāng)對一個自動日期表使用Power BI快速度量值時, Power BI快速度量值大量使用了列變體恐疲。我們不依賴于在Power BI中自動創(chuàng)建的日期表腊满,因為我們希望對模型保持最大的靈活性和最大的控制套么。列變體的語法不支持作為模型一部分的日期表,因此碳蛋,也不能自動創(chuàng)建胚泌。

標(biāo)準(zhǔn)時間智能函數(shù)的局限性

標(biāo)準(zhǔn)時間智能函數(shù)適用于常規(guī)的公歷。在本章節(jié)中列出了它們的幾個限制肃弟。當(dāng)你的需求和這些限制不兼容時玷室,你需要另外的模式(請參閱 Custom time-related calculationsWeek-related calculations)。

  • 年從1月1日開始笤受。對于從一個不同日期開始的財年日歷的支持有限阵苇。而且,每個財年的第一天必須是同一天并且由于與閏年有關(guān)的歷史bug不能是3月1日感论。
  • 季度總是在1月绅项、4月、7月和10月的第一天開始比肄。一個季度的日期范圍不能被修改快耿。
  • 月總是一個日歷月
  • 標(biāo)準(zhǔn)時間智能函數(shù)可能無法正確地篩選附加列,例如Day of Week或Working Day芳绩。關(guān)于可能的解決方案的更多細(xì)節(jié)掀亥,將在本章后面的"篩選其他日期屬性"中介紹。

?因此妥色,標(biāo)準(zhǔn)時間智能計算不支持許多高級計算搪花,比如對于周的計算。這些高級計算需要自定義日歷嘹害。

DAX Patterns, Second Edition | 中文翻譯撮竿,持續(xù)更新...
DAX Patterns, Second Edition by ALBERTO FERRARI, MARCO RUSSO

搜索微信公眾號:PowerBI最佳實踐, 獲取案例文件和更多Power BI/DAX精彩好文
DAX Patterns | 關(guān)于時間的標(biāo)準(zhǔn)計算 (qq.com)
DAX Patterns | 關(guān)于時間的標(biāo)準(zhǔn)計算 - 知乎 (zhihu.com)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市笔呀,隨后出現(xiàn)的幾起案子幢踏,更是在濱河造成了極大的恐慌,老刑警劉巖许师,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件房蝉,死亡現(xiàn)場離奇詭異,居然都是意外死亡微渠,警方通過查閱死者的電腦和手機(jī)搭幻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來逞盆,“玉大人檀蹋,你說我怎么就攤上這事∧苫鳎” “怎么了续扔?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵攻臀,是天一觀的道長。 經(jīng)常有香客問我纱昧,道長刨啸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任识脆,我火速辦了婚禮设联,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灼捂。我一直安慰自己离例,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布悉稠。 她就那樣靜靜地躺著宫蛆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪的猛。 梳的紋絲不亂的頭發(fā)上耀盗,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機(jī)與錄音卦尊,去河邊找鬼叛拷。 笑死,一個胖子當(dāng)著我的面吹牛岂却,可吹牛的內(nèi)容都是我干的忿薇。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼躏哩,長吁一口氣:“原來是場噩夢啊……” “哼署浩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起震庭,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤瑰抵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后器联,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡婿崭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年拨拓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氓栈。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡渣磷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出授瘦,到底是詐尸還是另有隱情醋界,我是刑警寧澤竟宋,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站形纺,受9級特大地震影響丘侠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜逐样,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一蜗字、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧脂新,春花似錦挪捕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至滞乙,卻和暖如春奏纪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背酷宵。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工让蕾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谬盐。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓兆沙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親男韧。 傳聞我的和親對象是個殘疾皇子朴摊,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,728評論 2 351