Power BI仿豆瓣讀書日歷型熱力圖
豆瓣在個人主頁上提供了熱力地圖總結(jié),顏色越深代表當(dāng)日標(biāo)記讀完的書越多。方框的多少代表讀書(含影音)的頻率。Power BI其實(shí)也能實(shí)現(xiàn)類似的功能,甚至實(shí)用性上更勝一籌。本文僅以讀書記錄為例嘗試操作。

該熱力圖除了用深淺顏色表示讀書數(shù)量,還可以懸窗動態(tài)提示當(dāng)日閱讀情況,信息包含:當(dāng)天是幾號,截止當(dāng)天全年累計(jì)讀了多少本書,本月讀了多少本書,并顯示當(dāng)天標(biāo)記的圖書封面。那么如何實(shí)現(xiàn)呢?


一、數(shù)據(jù)準(zhǔn)備
在豆瓣個人主頁的“已讀”記錄中,可以看到你在豆瓣標(biāo)記的所有圖書信息。將需要的書名、閱讀日期、圖片鏈接等信息批量下載下來。

因豆瓣對網(wǎng)抓有限制,該信息無法像抓取電影數(shù)據(jù)那樣使用Power BI直接下載,讀者需要使用其他網(wǎng)抓手段批量下載。如果不懂網(wǎng)抓也沒關(guān)系,可以直接將全部頁面手動復(fù)制粘貼到Excel,稍微清洗即可使用。

獲得的規(guī)范數(shù)據(jù)如下圖所示:

將整理好的數(shù)據(jù)導(dǎo)入Power BI,并對格式進(jìn)行規(guī)范設(shè)置,注意“封面”字段的數(shù)據(jù)類別設(shè)置為圖像URL:

“書籍鏈接”字段如后期需跳轉(zhuǎn)豆瓣,則設(shè)置為Web URL:

二、建模
首先,新建一個日期表,包含完整年份,并添加年、月、周等必要字段??梢允褂肅ALENDAR函數(shù)新建,也可Excel手工新建。

周指全年周排序,公式如下:
第幾周 = WEEKNUM('日期表'[Date],2)
月份字段有兩個,一個是自然月,一個是圖表月。后續(xù)在作圖的時候使用圖表月,圖表月的計(jì)算列公式是:
圖表月?=?MAXX(FILTER('日期表',EARLIER('日期表'[第幾周])='日期表'[第幾周]),'日期表'[月])

這樣做的原因是,如上圖,2020年第5周,有的日期在2月份,有的日期在1月份。如果采用自然月份作圖,會產(chǎn)生下圖中的問題:因?yàn)樵路輩^(qū)隔,第5周被分割成了兩列。因此單獨(dú)設(shè)立圖表月,使得跨月周取最大月份值作為唯一值。

接著,將日期表和準(zhǔn)備好的豆瓣數(shù)據(jù)關(guān)聯(lián):

最后,新建需要的基礎(chǔ)度量值:
數(shù)量 =DISTINCTCOUNT(data[書籍鏈接])
年度累計(jì) = TOTALYTD([數(shù)量],'日期表'[Date])
月度累計(jì) = TOTALMTD([數(shù)量],'日期表'[Date])
提示信息 = "全年累計(jì)"&[年度累計(jì)]&"本書,"&"本月累計(jì)"&[月度累計(jì)]&"本書"
三、作圖
圖表市場有日歷熱力地圖Calendar Visual,加載到Power BI后,字段如下設(shè)置:


生成的熱力圖如下圖所示:

該圖表非常遺憾,只能設(shè)置顯示顏色,沒有更多功能。如需實(shí)現(xiàn)文章開始提到的懸窗信息,則需要使用矩陣實(shí)現(xiàn)。

如下字段設(shè)置新建矩陣:

默認(rèn)的矩陣顯示的是數(shù)據(jù),熱力圖不需要數(shù)據(jù),需要的是有顏色的方塊。

因此,我們可以將背景色和字體設(shè)置為相同顏色,即可隱藏具體數(shù)字。

另外,顏色還有按數(shù)字大小變化的需求,新建顏色度量值,閱讀數(shù)量越多,顏色越深:
顏色 =
SWITCH?
(?[數(shù)量],?0,?"#FFFFFF",?1,?"#CBECB4",?2,?"#86D665",?"#11AD2B"?)
豆瓣的顏色代碼可通過colorpix獲取。點(diǎn)擊上圖條件格式中的“高級控件”,按照“顏色”度量值變化顏色。
寫到這里,熱力圖基本做完了,但仍有個小問題,比方第6周沒有讀書,圖表不會顯示,直接從第5周跳到第7周:
這樣不符合日歷常識,選中“第幾周”,鼠標(biāo)右鍵,勾選“顯示無數(shù)據(jù)的項(xiàng)目”即可避免這一問題:
接著制作懸浮頁面,新建空白頁,頁面大小選擇“工具提示”;日期和讀書信息使用卡片圖;書籍封面使用第三方圖表Image Grid。

圖表制作完成后,將該頁面的“工具提示”功能打開:

返回?zé)崃D頁面,“工具提示”選擇剛剛設(shè)置好的“工具提示”頁面:

以上即是整個制作過程。