在過去,我們想要從資料庫中取得統計數據,除了直接使用資料庫內建的統計功能外,通常還會透過建立新的資料庫,並搭配 Relation
和 Rollup
來達成。然而,本篇筆記將聚焦於如何在「不使用 Rollup
」的情況下,實現資料統計的方法。
學會運用公式編寫的方式,可以靈活應用於各種場合,如打卡習慣的追蹤、記帳金庫的數據分析等。此外,這種編寫方式的最大優點在於「頁面資料的反應速度」。相信長期使用 Notion 的朋友們都會發現,當資料庫規模逐漸增大、關聯的資料數量增多時,資料的顯示速度會明顯變慢。透過這個方法,您可以大幅提升使用體驗。
這是我看 Notion Workflow 影片的筆記,基礎的公式如下:
lets(
資料來源, map(prop("輸入"), current.prop("總價")),
mean, round(資料來源.mean() * 100) / 100,
median,round(資料來源.median() * 100) / 100,
count,round(資料來源.length() * 100) / 100,
max,round(資料來源.max() * 100) / 100,
min,round(資料來源.min() * 100) / 100,
range, max - min,
"平均數:$ " + mean + "\n" +
"中位數:$ " + median + "\n" +
"總筆數:$ " + count + "\n" +
"最大值:$ " + max + "\n" +
"最小值:$ " + min + "\n" +
"全距:$ " + range
)
Notion Workflow 在編寫這段公式時,沒有使用到sum()
函數,但接下來的部分我會將這個函數加入到公式中,讓整個統計數據看起來更完整。
且現在,我們要進一步讓統計資訊更具實用性。例如,將時間範圍限定為「本月」,可以幫助我們針對特定期間進行更精確的數據分析。
lets(
資料來源_本月, map(prop("輸入").filter(formatDate(current.prop("日期"), "YYYY-MM")
== formatDate(now(),"YYYY-MM")), current.prop("總價")),
加總值_本月, sum(資料來源_本月),
平均數_本月, round(資料來源_本月.mean() * 100) / 100,
中位數_本月,round(資料來源_本月.median() * 100) / 100,
總筆數_本月,round(資料來源_本月.length() * 100) / 100,
最大值_本月,round(資料來源_本月.max() * 100) / 100,
最小值_本月,round(資料來源_本月.min() * 100) / 100,
全距_本月, 最大值_本月 - 最小值_本月,
"加總值:$ " + 加總值_本月 + "\n" +
"平均數:$ " + 平均數_本月 + "\n" +
"中位數:$ " + 中位數_本月 + "\n" +
"總筆數:$ " + 總筆數_本月 + "\n" +
"最大值:$ " + 最大值_本月 + "\n" +
"最小值:$ " + 最小值_本月 + "\n" +
"全距:$ " + 全距_本月
)
學會編寫本月的統計數據後,我們也可以進一步編寫「上個月」的統計公式。
若你沒有頭緒,可以參考之前的文章〈Notion Formula 2.0 § 日期公式常用篇〉中提到的「月份的其他運算」來完成此公式的編寫。
當不同月份的數據可以互相比較後,還可以加入「符號」來增加直觀閱讀數據的效果。例如,若業績成長,可顯示鼓舞的符號提示;若業績下降,則顯示不開心的符號,讓統計結果一目了然。
圖片的部分主要是讓大家看到,根據不同的步驟編寫公式後顯示的結果,我們是可以只保留最後一個欄位的公式的,請嘗試編寫試試看吧!
我們再舉一個很常見的例子,就是在專案任務進度時,很常會使用到的計算完成個數,並轉換成百分比。
lets(
總筆數, map(prop("任務"),current.prop("完成")).length(), /*也可以直接計算幾個任務*/
完成數, map(prop("任務"),current.prop("完成")).filter(current).length(),
進度比例, round((完成數 / 總筆數) * 100) / 100,
進度比例
)
最後,提醒一下,因為 Notion 在計算數值的設定中,是可以設定你想要呈現的樣式,如 Number 或 Percent 等,所以我偏好在公式的部分不會幫它轉成百分比,而是透過它的資料庫欄位功能轉換,當然你可以根據自身的偏好來決定最後呈現的樣式。