官术网_书友最值得收藏!

  • DAX設計模式(第2版)
  • (意)阿爾貝托·法拉里等
  • 2611字
  • 2022-12-20 18:38:56

第1章 與時間相關的計算

本章介紹4種與時間相關的計算模式。其目的是幫助你根據自己的特定需求選擇正確的模式。確實,在進行時間相關的計算時,模式的選擇是個難題。

首先,什么是與時間相關的計算呢?與時間相關的計算是指任何涉及時間的計算。比如期初至今(年初至今、季初至今或月初至今)相關的一組計算。這些計算從一個時間段(年、季度、月)開始并返回自該時間段開始到報告中所示日期的度量值的聚合。時間段的定義會根據你使用的是公歷日歷還是會計日歷而存在差異。在圖1-1中,你可以看到一個期初至今計算的示例,其中,YTD代表年初至今、QTD代表季初至今。

圖1-1 期初至今計算的示例

這些模式還包括將特定時間段內的參數和另一時間段內的參數進行比較。例如,你可以將當月的銷售額與去年同月的銷售額進行比較。與時間相關的計算的另一個示例是一段時期內的移動平均,例如,12個月的移動平均可以讓折線圖平滑并消除對計算結果的季節性影響。4個與時間相關的模式會執行相同的一組計算。

對日歷的不同定義會使模式產生不同的結果。通過查看圖1-1,你已經可以理解年初至今計算的不同定義。

根據使用的是公歷日歷還是會計日歷,日期的數值會有差異。由于對日歷的定義不同,事情處理起來很容易變得非常復雜。

例如,你可能有遵循ISO標準或你自己定義的基于周的日歷。在基于周的日歷中,每個月從一周的同一天開始,這一年也是如此。因此,基于周的日歷中的一年可能在上一個公歷年開始,也可能在下一個公歷年結束。此外,出于會計目的,某些日歷會將一年分為13個時間段,而不是12個月。不同的日歷需求是導致對與時間相關的模式進行選擇的主要原因。

4個與時間相關的模式(依復雜程度遞增的排序)如下所示:

● 標準時間相關的計算;

● 與月相關的計算;

● 與周相關的計算;

● 自定義時間相關的計算;

標準時間相關的計算模式利用常規的DAX時間智能函數來實現。該模式的實現基于你的日歷是常規公歷日歷,并且你的會計日歷起始于公歷季度。例如,如果你的會計日歷從7月1日(公歷日歷第三季度的開始日期)開始,則DAX時間智能函數可以正常工作。但是,如果你的會計日歷從3月1日開始,則可能會出現出乎意料的計算結果。這既因為3月不是一個公歷季度的開始,又因為會計日歷在處理閏年方面的歷史缺陷。盡管有這些限制,該模式還是易于使用和執行的,因為它依賴于標準DAX函數,并且可以與常規日期表配合使用,幾乎沒有要求。

其他的3個模式不使用DAX時間智能函數計算。它們使用基本的DAX函數編寫,這就給以季度、月份和周定義的日歷提供了更大的靈活性。這些模式需要你創建一個Date表,DAX度量值需要通過該表中的列來識別該年度的時間段。例如,你需要一個包含年份的列、一個包含季度的列、一個包含月份的列,以及其他用于簡化計算的列。

此外,在檢測和篩選時間段時需要考慮許多細節。事實證明,許多看起來對于人類而言很容易的計算,而對于計算機就非常復雜。當你將一個季度與上一個季度進行比較時,你需要為兩個季度選擇不同的天數:1月至3月的季度比4月至6月的季度短。月份也是如此:1月比2月長,但是如果要逐月進行比較,則你所需要的兩個日期選擇會具有不同的長度。

如果標準時間智能函數不能滿足你的需求,則你需要執行其他3種模式中的一種。這3種模式都需要創建你自己的Date表。

與月相關的計算模式是最簡單的。該模式所執行的所有計算均假設你并不在意日常細節。例如,如果你需要生成兩個月份之間進行比較后的計算和報告,該模式非常適用。該模式不支持選擇子月份。如果你要比較一個季度中的3天與上一季度中相同的3天,則超出了這個模式的能力:它不起作用。盡管其分析能力存在很大局限性(僅限于月粒度),但與月相關的模式的分析速度仍非常快速且易于執行。此外,對于數據超過12個月的情況,它也可以無縫處理。它具有定制模式的靈活性,并且比標準時間相關模式簡單。如果月粒度這個局限不會影響你的計算,那么非常建議你選擇使用這個模式。

在與周相關的計算模式中,星期是日歷的基礎。盡管很多國家采用不同的國家標準來標識年份、季度和星期,但ISO 8601是提供星期日期系統定義的標準之一。一年有52或53個星期,每個季度有13個星期,每個季度又分為5+4+4個星期、4+5+4個星期或4+4+5個星期。如果一年中有53個星期,則其中一個季度有14個星期。因為一個星期不一定完整地包含在一個月份中,所以應將一個季度中的一組星期稱為“時間段”,雖然我們通常稱之為“月份”。因此,在以下描述中,我們會將月份名稱稱為“時間段”。

由于星期是主要單位,因此公歷日歷中的一年與基于周的日歷中的一年之間沒有對應關系。基于周的日歷始終在相同的星期幾開始,例如星期一或星期日。因此,偶爾才會在1月1日發生這種情況。對于基于周的年,一年起始于上一年的12月29日,還是當前年份的1月3日,都沒有關系。盡管有些不同,但是基于周的日歷具有顯著的特點:一個季度中的每個“月”都包含相同數量的星期幾。將一個季度與另一個季度進行比較,意味著比較相同的天數和相同的星期幾。

基于周的日歷需要一個專用的Date表。該表包含進行DAX計算的若干列。此外,由于沒有現成的可用于對基于周的日歷進行計算的DAX函數,所以使用自定義DAX代碼來執行此類計算。與周相關的模式的復雜程度要高于與月相關的模式,因為與周相關的模式可讓你實現篩選任何時間段,直到“天”的級別。如果你使用基于周的日歷,則必須采用基于周的計算模式。

自定義時間相關的計算模式是最靈活(且最復雜)的。作為最后一個模式,它提供與標準時間相關模式相同的計算。它的特點在于整個模式是使用基本的DAX函數編寫的,而不使用任何DAX時間智能函數。該模式極為靈活,因為你可以隨意變動計算的執行方式。當然,更高的靈活性也會帶來更高的復雜性。

那么,你應該選擇哪種模式呢?

● 如果常規的公歷日歷能滿足你的需求,那么顯而易見,選擇標準時間相關的計算模式。

● 如果月粒度足以滿足你的報告需求(通常是這種情況,而且比預期的要多得多),那么與月相關的計算模式就是最佳選擇,因為它快速而簡便。

● 如果你使用基于周的日歷,則需要與周相關的計算模式。

● 如果以上情況均不足以滿足需求,并且你確實需要完全的靈活性,請準備加入一場漫長而有趣的旅程,深入了解復雜的篩選上下文,然后直接進入自定義時間相關的計算模式。

切記:對于商業智能項目,越簡單越好。選擇最能直接滿足你需求的模式。不用多說,如果你對各種模式之間的差異感到好奇,那么在做出選擇之前快速通讀所有章節可能會對你很有幫助。

主站蜘蛛池模板: 于都县| 广安市| 通河县| 东山县| 广宁县| 独山县| 清水河县| 河南省| 平原县| 宿松县| 平江县| 合肥市| 阳信县| 内黄县| 徐闻县| 红河县| 巴林左旗| 鱼台县| 天峨县| 临城县| 沾化县| 鸡西市| 肃宁县| 瓦房店市| 黔东| 乌拉特后旗| 拜泉县| 叙永县| 双牌县| 潜江市| 固镇县| 澎湖县| 班戈县| 清新县| 宿松县| 尼木县| 沈阳市| 太白县| 通城县| 驻马店市| 阳原县|