PowerBI 通用萬能日歷模板,想干嘛就干嘛

又一個終極應用誕生了,當然,這個早就有了,今天做一個發(fā)布。
我們知道在 PowerBI 中,默認的日歷是非常丑陋以及有很多限制的,而自定義可視化圖表中的控件也并不完美。
因此,我們有必要自己打造一套 PowerBI 日歷控件。
在寫作本文時,對日歷模板的使用已經(jīng)有了更多的玩法,為了有一個穩(wěn)固的起點,我們從基礎版本來進行構(gòu)造。后續(xù)文章,我們再來進一步提升這個日歷模板的能力。
開始
現(xiàn)來看一個一般的日歷的樣子,例如,在你的 Windows 右下角就有一個日歷,如下:

我們可以發(fā)現(xiàn):
1、這是一個表格布局,因此,可以考慮矩陣來實現(xiàn)。
2、在每個單元格內(nèi)都可以有更豐富的內(nèi)容。
布局
通過觀察可以發(fā)現(xiàn):
1、頭部表示周內(nèi)日期的名字
2、行需要有 6 行,這點非常重要
行是必須要有 6 行的,有人說,不需要,因為 5 行就可以容納 35 日,而一個月最多 31 日,因此,5 行就夠了。非也,在極端情況下,某月1日可以在某周日,這就導致該月的第 30 日會出現(xiàn)在第 6 行。
為此,我們只需要構(gòu)建和 Windows 一樣的日歷結(jié)構(gòu)即可。
構(gòu)建基本結(jié)構(gòu)
我們來構(gòu)建日歷頭部,如下:
Calendar.Matrix.Header =
// 步驟1. 建立該表
// 步驟2. 案列排序
SELECTCOLUMNS(
{
( "Mon" , "一" , 1 ),
( "Tue" , "二" , 2 ),
( "Wed" , "三" , 3 ),
( "Thu" , "四" , 4 ),
( "Fri" , "五" , 5 ),
( "Sat" , "六" , 6 ),
( "Sun" , "日" , 7 )
} , "DayNameEN" , [Value1] , "DayNameCN" , [Value2] , "DayIndex" , [Value3] )再來構(gòu)建日歷的行,如下:
Calendar.Matrix.Row =
SELECTCOLUMNS(
{
1,2,3,4,5,6
} , "Index" , [Value] )用這個結(jié)構(gòu)生成一個日歷,則有:

這樣,初步的結(jié)構(gòu)就有了。
構(gòu)建日期度量值
我們需要知道每一天的日歷內(nèi)的日期,如下:

給出度量值如下:
Calendar.Cell.Date.Value =
VAR _date_base = MIN( 'Calendar'[Date] )
VAR _position_number =
VAR _row = SELECTEDVALUE( 'Calendar.Matrix.Row'[Index] )
VAR _column = SELECTEDVALUE( 'Calendar.Matrix.Header'[DayIndex] )
RETURN ( _row - 1 ) * 7 + _column
RETURN _date_base - WEEKDAY( _date_base , 2 ) + _position_number這樣,就有了具體的日期了。
簡化顯示如下:
Calendar.Cell.Date.Display =
FORMAT( [Calendar.Cell.Date.Value] , "dd" )則有:

調(diào)配顏色
將字體和背景做一個簡單處理,如下:

設置顏色的度量值如下:
Calendar.Cell.Color.BG =
VAR _date_value = [Calendar.Cell.Date.Value]
RETURN
IF(
YEAR( _date_value ) = SELECTEDVALUE( 'Calendar'[YearNumber] ) &&
MONTH( _date_value ) = SELECTEDVALUE( 'Calendar'[MonthNumber] ) ,
"#6C89B1" , "#A0ADCA"
)以及:
Calendar.Cell.Color.Font =
VAR _date_value = [Calendar.Cell.Date.Value]
RETURN
IF(
YEAR( _date_value ) = SELECTEDVALUE( 'Calendar'[YearNumber] ) &&
MONTH( _date_value ) = SELECTEDVALUE( 'Calendar'[MonthNumber] ) ,
"#FFFFFF" , "#EEEEEE"
)至此我們的日歷就已經(jīng)打造好了。
日歷的擴展
如果我們想知道基于日歷的某些重要信息,例如:同時顯示當日內(nèi)的很多信息,例如:銷售額,新客戶數(shù)等。
將擴展的內(nèi)容以度量值表示,如下:
Calendar.Cell.Content =
VAR _kpi_value = CALCULATE( [KPI] , TREATAS( { [Calendar.Cell.Date.Value] } , 'Calendar'[Date] ) , ALL( 'Calendar' ) )
RETURN
"當日KPI:" & UNICHAR( 10 ) &
FORMAT( _kpi_value , "#,#" )則有:

再進一步簡化為:

我們知道聰明的你馬上就可以舉一反三出各種應用了,沒有錯,可以做包括警報之類的很多效果,例如:

這非常容易,我們只需要對觸發(fā)了某些條件的內(nèi)容染色即可。
總結(jié)
我們通過觀察對比,在 PowerBI 中使用 DAX 打造了完全自定義的日歷模板,該模板非常強大,可以按照任何形式顯示任何內(nèi)容,尤其是可以高亮任何我們希望高亮顯示的部分,這將非常有現(xiàn)實意義。
這僅僅是我們的 1.0 版本。
留一個問題給到讀者小伙伴吧,如何將這個日歷模板進行擴展,使其可以支持農(nóng)歷以及節(jié)假日。
在訂閱了BI佐羅講授的《BI進行時》課程區(qū),除了可以下載本文案例,觀看視頻講解,還將為小伙伴提前分享萬能日歷模板的 2.0 版,支持農(nóng)歷,支持節(jié)假日版。

讓數(shù)據(jù)真正成為你的力量
Create value?through?simple and?easy?with fun?by PowerBI
Excel BI?|?DAX Pro?|?DAX?權(quán)威指南?|?線下VIP學習
掃碼與PBI精英一起學習,驗證碼:data2020
PowerBI MVP 帶你正確而高效地學習 PowerBI
點擊“閱讀原文”,即刻開始
↙
