1. 概述
1.1 預期效果
如何實現類似 GitHub 的打碼貢獻圖呢,如下圖所示:
1.2 實現思路
透過公式結合儲存格擴展屬性來實現。
注:由於公式中使用了 TODAY 函式,因此在使用時,你需要確定資料表的資料是當年資料,範例範本使用的是2021年的資料。
2. 範例
2.1 準備資料
建立普通報表,建立一個內建資料集 Embedded1,包含「rq」和「num」兩個欄位,分別表示「日期」和「貢獻度」,貢獻度為從 1 到 9 的整數(也可自訂)。如下圖所示:
2.2 設計報表
表格樣式如下圖所示:
1)儲存格 A2、A3 合併,A2、B1、B2 儲存格均插入公式,具體設定如下:
儲存格 | 公式 | 擴展方向 | 公式說明 |
---|---|---|---|
A2 | array(1,2,3,4,5,6,0) | 縱向 | 建立一個陣列,陣列內容為週一至週日對應的數字 |
B1 | maparray(range(12,0,-1),left(monthdelta(today(),-item),7)) | 橫向 | 生成去年同期至今的所有月份 |
B2 | greparray(range(dateinweek(yeardelta(today(),-1),1),today()),weekday(item)=A2 | 橫向 | 生成去年同期至今的所有日期後,根據 A2 的週幾和 B1的月份篩選出對應的資料 |
2)B3 儲存格拖入內建資料集的 num 欄位,設定「過濾」條件:列名 rq 等於儲存格 B2。即當 B3 儲存格如下圖所示:
2.3 設定儲存格形態
透過設定「儲存格屬性>形態>公式形態」將儲存格公式傳回的結果顯示為我們需要的形態。具體設定如下表:
儲存格 | 公式形態 | 公式說明 |
---|---|---|
A2 | "週" IF($$$=0,"日",numto($$$)) | 將儲存格的值轉化為週一至週日 |
B1 | month($$$ "-01") "月" | 將儲存格的值以 "x月" 的形式顯示 |
B3 | "" | 顯示空值 |
範例圖如下所示:
2.4 新增條件屬性
選中 B3 儲存格,新增兩個條件屬性,分別設定「背景」和「邊框」。
1)背景:當 B3 儲存格值大於 0 時,該儲存格顯示有背景色。如下圖所示:
注:還可根據數字範圍設定不同的背景色。
2)邊框:當儲存格滿足公式 INARRAY(B2,range(yeardelta(today(),-1),today()))>0 即儲存格有日期時,顯示邊框。如下圖所示:
2.5 設定儲存格內容提示
給 B3 儲存格設定「內容提示」,選擇「儲存格屬性>其他>內容提示」,輸入 =format(B2,"yyyy-MM-dd") "貢獻:" nvl($$$,0)
注:此時使用的是公式,需要加上等號。
2.6 隱藏行
完成所有設定後,隱藏第二行儲存格,最後適當縮減表格列寬。
2.7 設定紙張大小
選擇菜單欄「範本>頁面設定」,自訂紙張大小,使其顯示時不分頁。如下圖所示:
2.8 效果預覽
2.8.1 PC 端
儲存報表,點選「分頁預覽」,效果如下圖所示:
2.8.2 行動端
App 端和 HTML5 端均支援,效果如下圖所示:
注:行動端不顯示提示內容。
3. 範本下載
點選下載範本:貢獻日麗圖.cpt