SumIf

SumIf 根據條件加總欄位中的值。

語法:SumIf(欄位, 條件)

範例:在下表中,SumIf([付款], [方案] = "基本") 會傳回 200。

付款 方案
100 基本
100 基本
200 商務
200 商務
400 進階

類似 sumif彙總公式應新增至查詢產生器的摘要選單 > 自訂表達式(如果需要,請在選單中向下捲動)。

參數

  • column 可以是數值欄位的名稱,或是傳回數值欄位的函式
  • condition 是傳回布林值(truefalse)的函式條件陳述式,例如條件陳述式 [付款] > 100

多個條件

我們將使用以下範例資料向您展示具有必要選用混合條件的 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。

提示:養成在 ANDOR 群組周圍加上括號的習慣,以避免將必要條件變成選用條件(反之亦然)。

依群組的條件小計

若要取得類別或群組的條件小計,例如每個方案的付款總額,您將

  1. 撰寫具有您條件的 sumif 公式。
  2. 在查詢產生器中新增分組依據欄位。
付款 方案 收到日期
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

您可以組合 Sumcase

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

如果我們的付款範例資料在名為 dfpandas 資料框架欄位中,則 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 版本的文件。