累計計數和總和
累計計數會計算跨越一個分組的列的加法總計計數。累計總和會計算跨越一個分組的欄的滾動總和(也稱為執行總計)。
語法
您可以使用預先定義的「累計計數」和「累計總和」指標,或自訂運算式
CumulativeCount
CumulativeSum(column)
累計指標只能在查詢產生器的「摘要」步驟中使用 — 您無法使用累計指標來建立自訂欄或篩選器。
累計指標的計算方式
在底層,累計指標分三個步驟計算
- 使用「群組依據」區塊中的分組來群組記錄。
- 計算每個群組中的列數。
- 對於每個群組,計算所有先前群組(包括目前群組)中計數的累計總計。
由於累計指標使用先前列中的值,因此分組欄中的排序順序很重要。
例如,如果您有一個表格,其中的資料依月份分組,Metabase 將會像這樣計算累計計數
月份 | 計數 |
累計計數 |
---|---|---|
七月 | 5 | 5 |
十一月 | 4 | 5+4 = 9 |
三月 | 2 | 5 + 4 + 2 = 11 |
如果排序變更(而值保持不變),則累計計數也會變更
月份 | 計數 |
累計計數 |
---|---|---|
三月 | 2 | 2 |
七月 | 5 | 2 + 5 = 7 |
十一月 | 4 | 2 + 5 + 4 = 11 |
當查詢中只有一個分組時,Metabase 會依分組欄以遞增順序排序資料(使用您的資料庫用於欄資料類型的邏輯)。若要變更 Metabase 累積指標的方式,您可以依分組欄新增「排序」區塊。
具有多個分組的累計指標
由於累計指標根據先前列計算其摘要,因此 Metabase 需要判斷這些先前列是什麼。Metabase 將根據您是否依日期時間欄分組,然後依其他分組的順序,決定如何計算和顯示累計指標
具有日期時間維度的查詢
如果您在「群組依據」區塊中使用日期時間維度,Metabase 將會沿著日期時間維度累積,然後依「群組依據」區塊中的任何其他欄位(依順序)分組
如果有多個日期時間維度(包括依相同日期時間欄進行多個群組),Metabase 將會沿著更精細的維度累積,無論其順序為何。例如,如果您依「建立時間:月份」和「檢視時間:週」分組,Metabase 將會沿著「檢視時間:週」累積。
在具有日期時間維度的查詢中,非日期時間欄位的「排序」區塊不會影響 Metabase 計算結果的方式。「排序」區塊只會影響結果中分組的順序。
沒有日期時間維度的查詢
如果「群組依據」區塊中沒有日期時間欄位,Metabase 將會沿著「群組依據」區塊中指定的「最後一個」維度累積,並依其他欄位從左到右依序分組。
預設情況下,Metabase 將會對用於累積的維度使用遞增排序。您可以為累積維度新增「排序」區塊以變更順序,這會變更 Metabase 計算累計指標的方式,以及呈現結果的方式。
依「最後一個」(累積)欄位以外的任何欄位排序只會影響結果中分組的順序。這不會變更 Metabase 計算結果的方式。
相關函數
SQL 中的累計計數
在 SQL 中,您可以使用視窗函數來計算累計指標。例如,若要計算數個月的累計訂單計數,您可以使用下列查詢
SELECT
created_month,
SUM(count(*)) OVER (
ORDER BY
created_month ASC ROWS UNBOUNDED PRECEDING
) AS "sum"
FROM
(
SELECT
quantity,
DATE_TRUNC ('month', created_at) AS created_month
FROM
orders
)
GROUP BY
created_month
ORDER BY
created_month ASC
SQL 中的累計總和
對於累計總和,您可以使用
SELECT
created_month,
SUM(SUM(quantity)) OVER (
ORDER BY
created_month ASC ROWS UNBOUNDED PRECEDING
) AS "sum"
FROM
(
SELECT
quantity,
DATE_TRUNC ('month', created_at) AS created_month
FROM
orders
)
GROUP BY
created_month
ORDER BY
created_month ASC
您可以按一下右上角的「檢視 SQL」(「>_」) 按鈕,在查詢產生器中檢視查詢產生的 SQL。
閱讀其他 版本 Metabase 的文件。