您當前的位置:首頁 > 書法

使用DAX改進Power BI中的時序折線圖

作者:由 趙文超 發表于 書法時間:2019-08-27

本文翻譯自Marco Russo的文章——

《Improving temporal line charts in Power BI with DAX 》,本文介紹了在Power BI中如何使用DAX改進X軸基於日期的折線圖,以及如何正確進行資料建模和視覺化展現

Power BI中的折線圖是一種用於展示實時事件的實用視覺化工具,但是,折線圖會在應用於日粒度時呈現最佳效果。為了達到其他粒度級別的最佳視覺化,我們必須更改資料模型並編寫DAX表示式。下文中所涉及的操作有:

控制分類折線圖的屬性

使用月粒度和季度粒度連續折線圖

實現周粒度

在選擇月份、季度和年份時,隱藏不完整的週數

使用時態資料管理分類折線圖

在分析解決方案之前,我們需要將問題仔細闡述清楚。在演示模型中,日期表的層級包含年份、季度、月份,如果你在構建銷售額(Sales Amount)的折線圖時將其層級放於軸上,則會獲得如下結果:

使用DAX改進Power BI中的時序折線圖

在示例模型中,我們使用的是自定義的日期表。然而,如果我們在Power BI中使用

Auto Date/Time

選項,結果幾乎是一樣的。折線圖中軸上的層次結構使得PowerBI顯示出第一個層級,即年份。可以看見,圖中只包含三個點,但使用者往往需要更多點才能得出有用資訊。

當你使用自定義的日期表時,屬性如下圖所示:

使用DAX改進Power BI中的時序折線圖

在下面的截圖中,點選下鑽按鈕,它可以導航到軸屬性層級中的下一級。

使用DAX改進Power BI中的時序折線圖

透過下鑽可顯示季度級別的資料,該模型透過使用包含季度和年份的字串來定義資料,從而使季度列在不同年份具有唯一性。然而顯示的結果似乎過於冗餘,每個資料點上的年份都重複出現了兩次。

使用DAX改進Power BI中的時序折線圖

透過重複下鑽操作,我們可導航到日期表層次結構的月份級別。

使用DAX改進Power BI中的時序折線圖

上圖中的結果令人不解,因為X軸上每個資料點標籤的年份都重複了三次。然而,沒有年份屬性的季度或月份列並不能徹底解決問題。圖表中的每個點上依然會有重複的年份。

有一個不完全的解決方案是在下圖所示的視覺化折線圖的X軸上的“連線標籤”選項,將其禁用。

使用DAX改進Power BI中的時序折線圖

下圖中顯示的結果只是稍作改動,便從季度和月份級別上移除了年份從而改善了閱讀體驗,但很難想象如何在同一圖表中顯示超過三年的內容。實際上,當存在過多標籤時。Power BI為每個點建立了一個只展示部分報告的捲軸(即使下一份圖表中的季度和月份級別上仍然出現年份數字)。

使用DAX改進Power BI中的時序折線圖

最後一個視覺化顯示了36個點,若增加年份將使其在單個視覺化中無法讀取。此外,若將圖表擴充套件到以周為單位顯示,則需要為每年設定52個點,同樣的問題再次產生:過多的點,過多的標籤。

到現在為止,因為資料需用字串顯示,所以我們使用的都是分類折線圖。折線圖還提供了一種名為連續型的視覺化型別,它需要軸屬性為數字列或日期列。連續折線圖的軸顯示的標籤數量較少,這是因為缺少的標籤可根據與現有標籤的距離來推斷。連續折線圖也對日期列起到特殊的管理作用,即顯示簡化的Year-Month標籤。舉個例子,在下圖中,度量值與之前一樣,但這次使用的是連續折線圖。標籤之間的距離可透過網格線來判斷,這個方法也適用於判斷可見軸標籤之間的距離。

使用DAX改進Power BI中的時序折線圖

因為該軸現在有來自日期表中的的日期列,則可將折線圖屬性中的X軸區域的型別屬性設定為連續型,只有日期和數字可以與連續折線圖一起使用。此外,網格線屬性也已啟用,它也是同一X軸區域的一部分。

使用DAX改進Power BI中的時序折線圖

雖然連續折線圖改善了標籤的處理,但我們只能被迫使用日粒度。這將導致折線圖中包含1000個點,然而更重要的是,這很可能不是使用者想要展示的粒度。使用月粒度或周粒度可以獲得更好的資訊。我們將在下一節中展示如何透過使用DAX程式碼修改資料模型來克服該問題的限制性。

使用月粒度和季度粒度連續折線圖

正如上一節所示,連續折線圖僅適用於數字列。日期列在內部作為數字進行管理,並且折線圖會以智慧方式來顯示日期。如果X軸上的點太多,則需要壓縮同一視覺化中的所有資料點,連續折線圖不再需要水平捲軸。當以不同的粒度(如月粒度和季度粒度)來呈現資料時,這一方法同樣很實用。

換句話說,為了使用連續折線圖,你需要在軸上使用日期列。然而,如果使用像月份和季度這樣較低的粒度時,用於切片的列通常是代表月份或季度的字串。這種情況下,似乎只能放棄連續折線圖從而被迫使用分類折線圖(及其所有約束),但事實並非如此。

解鎖不同時間段的連續類需使用日期列顯示所需的粒度,該日期列將整個週期聚合為單個日期。更簡便的方法是在週期本身的最後一個日期聚合整個週期。舉個例子,我們可在日期表中建立如下兩個計算列。

使用DAX改進Power BI中的時序折線圖

我們在此採用兩種不同的技術,Year-Month計算列使用DAX函式

EOMONTH

計算月末,這適用於任何標準日曆表。

並且,此處用於計算Year-Quarter計算列的技術對於自定義日曆或月份以外的粒度同樣有效:只需在篩選上下文中使用

ALLEXCEPT

保留一列或多列所需標識的週期,使用單列表示所需粒度始終可行。然而,如果該季度並非每年都是獨一無二的,那我們就不用建立 Year Quarter Number 列, 我們需要建立的是

ALLEXCEPT

( ‘Date’, ‘Date’[Year],‘Date’[Quarter Number] )

下圖顯示了連續折線圖在軸屬性中使用Year-Month列的結果,我們專門為該圖表啟用了資料標籤和X軸 / 標題屬性。

使用DAX改進Power BI中的時序折線圖

將軸屬性中的日期列替換為Year-Quarter列後,圖表的粒度以季度劃分,唯一需要注意的是,在預設情況下,工具提示會顯示使用日期(季度末)作為其本身的一個標籤。解決方法是用如MMMM yyyy這樣的格式表示季末列和月末列。但是,週期末不會明確呈現粒度是按月還是按季度劃分,因此展示在X軸中啟用標題視覺化的粒度極其重要,我們也使用了月粒度去啟用之前的折線圖計算(下圖不適用於下載的示例檔案中的MMMM yyyy格式)。

使用DAX改進Power BI中的時序折線圖

如圖所見,使用日期來表示月份和季度是解鎖連續視覺化型別的有用技能,下一節所述的是如何以周粒度呈現資料。

使用周粒度連續折線圖

由於週數不同於月份、季度及年份,我們需要根據同一周的所有日期對一週的粒度進行分組,在日期表中我們建立了兩個計算列:

YearWeekNumber

計算出一個序列號來表示自參考日期以來的週數。而DAX表示式中的FirstDayOfWeek變數用來定義一週中的第一天,YearWeekNumber 計算列可以隱藏起來。

Week

使用先前展示過的技術計算季度的最後一天(包含一週中的最後一天)——按上一步計算的YearWeekNumber列對日期進行分組。

使用DAX改進Power BI中的時序折線圖

下圖顯示了在軸上使用Week列的結果:

使用DAX改進Power BI中的時序折線圖

當以周級別顯示資料時,每年會有52個數據點。上一個圖表有156個數據點,這對限制該圖表的日期範圍可能很奏效。但是,如果不是標準的ISO周曆,那麼所選週期的第一週和最後一週的資料很可能會缺損。下一節將介紹如何在標準日曆中管理該條件。

在視覺化中隱藏不完整的週數

當日期選擇折線圖中不完整的時間段時,常常導致視覺化效果不佳。如下圖所示,我們選擇了2008年2月到6月之間的銷售情況。該範圍內,第一週和最後一週是不完整的,相對於折線圖的其他部分來說只是一個小數字——似乎已經低於Y軸上設定的最小值(1,000,000)。

使用DAX改進Power BI中的時序折線圖

該視覺化模型呈現資料時可提供更多正在進行的操作的相關詳細資訊。

使用DAX改進Power BI中的時序折線圖

第一行截至於2月2日的那一週,因此銷售額僅包括了兩天(2月1日和2日),而不考慮當週(1月27日至31日)其他五天的銷售情況。與上週相同,該周包括了6月29日和30日的銷售資料,但不包括當週(7月1日至5日)剩餘五天的銷售額。 這也解釋了為什麼儘管月份切片器僅包括截至2008年6月的日期,但該報告卻包括截至2008年7月的一週。

我們還可以建立一個度量值來從計算中刪除不完整的週數,類似的技巧還可適用於不完整的月份和季度,如以下程式碼所示。

使用DAX改進Power BI中的時序折線圖

現在,折線圖視覺化可使用新的度量值來刪除第一個和最後一個數據點,呈現更多可靠的資料。

使用DAX改進Power BI中的時序折線圖

在將模型視覺化中的Sales Amount度量值與Sales Amount complete weeks度量值進行比較時,後者的操作會更加清晰。

使用DAX改進Power BI中的時序折線圖

新的度量值會為兩個不完整的周返回一個空白值,此外,Sales Amountcomplete weeks度量值中使用的篩選技術同樣適用於所有層級;它僅包括完整的週數而不需要數週的昂貴迭代來獲得正確的結果。該結果對於按周計算平均值很有用,否則如果使用常規的Sales Amount度量值時,將會因為不完整週數的存在而導致資料不可靠。

總結

本文介紹了幾種在折線圖的X軸上用不同粒度的Date表來改進度量視覺化的技術,這些技術可以適用於任何非標準日曆。更重要的一點是,透過使用DAX對資料模型稍作改動,我們可以解決現有視覺化的某些條件限制。

原文連結:

https://www。

sqlbi。com/articles/impr

oving-temporal-line-charts-in-power-bi-with-dax/

* PowerPivot工坊原創文章,轉載請註明出處!

如果您想深入學習微軟Power BI,歡迎登入網易雲課堂試聽學習我們的“

從Excel到Power BI資料分析視覺化

”系列課程。或者關注我們的公眾號(PowerPivot工坊)後猛戳”線上學習”。

使用DAX改進Power BI中的時序折線圖

長按下方二維碼關注“Power Pivot工坊”獲取更多微軟Power BI、PowerPivot相關文章、資訊,歡迎小夥伴兒們轉發分享~

使用DAX改進Power BI中的時序折線圖

標簽: 折線圖  粒度  視覺化  日期  使用