SumIf
SumIf
根據條件加總欄位中的值。
語法:SumIf(欄位, 條件)
。
範例:在下表中,SumIf([付款], [方案] = "基本")
會傳回 200。
付款 | 方案 |
---|---|
100 | 基本 |
100 | 基本 |
200 | 商務 |
200 | 商務 |
400 | 進階 |
參數
多個條件
我們將使用以下範例資料向您展示具有必要、選用和混合條件的 SumIf
。
付款 | 方案 | 收到日期 |
---|---|---|
100 | 基本 | 2020 年 10 月 1 日 |
100 | 基本 | 2020 年 10 月 1 日 |
200 | 商務 | 2020 年 10 月 1 日 |
200 | 商務 | 2020 年 11 月 1 日 |
400 | 進階 | 2020 年 11 月 1 日 |
必要條件
若要根據多個必要條件加總欄位,請使用 AND
運算子組合條件
SumIf([Payment], ([Plan] = "Basic" AND month([Date Received]) = 10))
此表達式會在以上範例資料中傳回 200:十月份基本方案收到的所有付款總和。
選用條件
若要使用多個選用條件加總欄位,請使用 OR
運算子組合條件
SumIf([Payment], ([Plan] = "Basic" OR [Plan] = "Business"))
在範例資料中傳回 600。
部分必要條件與部分選用條件
若要組合必要條件與選用條件,請使用括號將條件分組
SumIf([Payment], ([Plan] = "Basic" OR [Plan] = "Business") AND month([Date Received]) = 10)
在範例資料中傳回 400。
提示:養成在
AND
和OR
群組周圍加上括號的習慣,以避免將必要條件變成選用條件(反之亦然)。
依群組的條件小計
若要取得類別或群組的條件小計,例如每個方案的付款總額,您將
- 撰寫具有您條件的
sumif
公式。 - 在查詢產生器中新增分組依據欄位。
付款 | 方案 | 收到日期 |
---|---|---|
100 | 基本 | 2020 年 10 月 1 日 |
100 | 基本 | 2020 年 10 月 1 日 |
200 | 商務 | 2020 年 10 月 1 日 |
200 | 商務 | 2020 年 11 月 1 日 |
400 | 進階 | 2020 年 11 月 1 日 |
若要加總商務與進階方案的付款
SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")
或者,加總所有非「基本」方案的付款
SumIf([Payment], [Plan] != "Basic")
「不等於」運算子
!=
應寫為 !=。
若要按月檢視這些付款,請將分組依據欄位設定為「收到日期:月份」。
收到日期:月份 | 商務與進階方案付款總額 |
---|---|
十月 | 200 |
十一月 | 600 |
提示:與其他人分享您的工作時,即使
!=
篩選條件較短,使用OR
篩選條件仍有幫助。包含性的OR
篩選條件可讓您更容易瞭解總和中包含哪些類別(例如,方案)。
接受的資料類型
資料類型 | 可搭配 SumIf 使用 |
---|---|
字串 | ❌ |
數字 | ✅ |
時間戳記 | ❌ |
布林值 | ✅ |
JSON | ❌ |
請參閱參數。
相關函式
執行相同操作的不同方法,因為 CSV 檔案仍佔全球資料的 40%。
Metabase
其他工具
case
Sum(case([Plan] = "Basic", [Payment]))
來執行與 SumIf
相同的功能
SumIf([Payment], [Plan] = "Basic")
case
版本可讓您在不符合條件時加總不同的欄位。例如,您可以建立一個名為「營收」的欄位,該欄位
- 在「方案 = 基本」時加總「付款」欄位,以及
- 在其他情況下加總「合約」欄位。
sum(case([Plan] = "Basic", [Payment], [Contract]))
CumulativeSum
SumIf
不執行累計總計。您需要將 CumulativeSum 彙總與 case
公式組合。
例如,若要按月取得商務與進階方案的付款累計總計(使用我們的付款範例資料)
收到日期:月份 | 商務與進階方案付款總額 |
---|---|
十月 | 200 |
十一月 | 800 |
從摘要 > 自訂表達式建立彙總
CumulativeSum(case(([Plan] = "Basic" OR [Plan] = "Premium"), [Payment], 0))
別忘了將分組依據欄位設定為「收到日期:月份」。
SQL
當您使用查詢產生器執行問題時,Metabase 會將您的查詢產生器設定(篩選條件、摘要等)轉換為 SQL 查詢,並針對您的資料庫執行該查詢以取得結果。
如果我們的付款範例資料儲存在 PostgreSQL 資料庫中,則 SQL 查詢
SELECT
SUM(CASE WHEN plan = "Basic" THEN payment ELSE 0 END) AS total_payments_basic
FROM invoices
相當於 Metabase 表達式
SumIf([Payment], [Plan] = "Basic")
若要新增具有分組欄位的多個條件,請使用 SQL 查詢
SELECT
DATE_TRUNC("month", date_received) AS date_received_month,
SUM(CASE WHEN plan = "Business" THEN payment ELSE 0 END) AS total_payments_business_or_premium
FROM invoices
GROUP BY
DATE_TRUNC("month", date_received)
SQL 查詢的 SELECT
部分符合 Metabase SumIf
表達式
SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")
SQL 查詢的 GROUP BY
部分對應至設定為「收到日期:月份」的 Metabase 分組依據 欄位。
試算表
如果我們的付款範例資料在試算表中,「付款」位於 A 欄,「收到日期」位於 B 欄,則試算表公式
=SUMIF(B:B, "Basic", A:A)
會產生與 Metabase 表達式相同的結果
SumIf([Payment], [Plan] = "Basic")
若要新增其他條件,您需要切換到試算表陣列公式。
Python
如果我們的付款範例資料在名為 df
的 pandas
資料框架欄位中,則 Python 程式碼
df.loc[df['Plan'] == "Basic", 'Payment'].sum()
相當於 Metabase 表達式
SumIf([Payment], [Plan] = "Basic")
若要新增具有分組欄位的多個條件
import datetime as dt
## Optional: convert the column to a datetime object
df['Date Received'] = pd.to_datetime(df['Date Received'])
## Extract the month and year
df['Date Received: Month'] = df['Date Received'].dt.to_period('M')
## Add your conditions
df_filtered = df[(df['Plan'] == 'Business') | (df['Plan'] == 'Premium')]
## Sum and group by
df_filtered.groupby('Date Received: Month')['Payment'].sum()
這些步驟會產生與 Metabase SumIf
表達式相同的結果(具有設定為「收到日期:月份」的分組依據欄位)。
SumIf([Payment], [Plan] = "Business" OR [Plan] = "Premium")
延伸閱讀
閱讀其他Metabase 版本的文件。