運算式列表

如需運算式簡介,請查看自訂運算式總覽

彙總

彙總運算式會將欄位中的所有值納入考量。它們只能在查詢產生器的摘要區段中使用。

平均值

傳回欄位中值的平均值。

語法:Average(欄位)

範例:Average([數量]) 會傳回「數量」欄位的平均值。

計數

傳回選取資料中的列數(也稱為記錄)。

語法:Count

範例:Count 如果表格或結果傳回 10 列,Count 將傳回 10

條件計數

僅計算條件為 true 的列。

語法:CountIf(條件)

範例:CountIf([小計] > 100) 會傳回小計大於 100 的列數。

相異值

此欄位相異值的數量。

語法:Distinct(欄位)

Distinct([姓氏])。傳回欄位中不重複姓氏的計數。重複項(例如姓氏「Smith」)不計入。

最大值

傳回欄位中找到的最大值。

語法:Max(欄位)

範例:Max([年齡]) 會傳回「年齡」欄位中所有值中最大的年齡。

相關項目:最小值平均值中位數

中位數

傳回指定欄位的中位數。

語法:Median(欄位)

範例:Median([年齡]) 會找出年齡中點,其中一半年齡較大,一半年齡較小。

不支援 median 的資料庫:Druid、MariaDB、MongoDB、MySQL、SQLite、Vertica 和 SQL Server。Presto 僅提供近似結果。

相關項目:最小值最大值平均值

最小值

傳回欄位中找到的最小值。

語法:Min(欄位)

範例:Min([薪資]) 會找出「薪資」欄位中所有薪資中最低的薪資。

相關項目:最大值中位數平均值

百分位數

傳回欄位在百分位數的值。

語法:Percentile(欄位, 百分位數值)

範例:Percentile([分數], 0.9) 會傳回該欄位中所有值第 90 個百分位數的值。

不支援 percentile 的資料庫:Druid、H2、MariaDB、MySQL、MongoDB、SQL Server、SQLite、Vertica。Presto 僅提供近似結果。

比例

以小數形式傳回資料中符合條件的列百分比。

語法:Share(條件)

範例:Share([顏色] = "藍色") 會傳回「顏色」欄位設定為 藍色 的列數,除以總列數。

標準差

計算欄位的標準差,這是衡量一組值變異的指標。標準差低表示值群集在平均值附近,而標準差高表示值分佈在很廣的範圍內。

語法:StandardDeviation(欄位)

範例:StandardDeviation([人口]) 會傳回「人口」欄位中值的標準差。

不支援 StandardDeviation 的資料庫:Druid、SQLite。

總和

加總欄位的所有值。

語法:Sum(欄位)

範例:Sum([小計]) 會加總「小計」欄位中的所有值。

條件總和

僅針對條件為 true 的列加總指定的欄位。

語法:SumIf(欄位, 條件)

範例:SumIf([小計], [訂單狀態] = "有效") 會加總狀態為「有效」的訂單的所有小計。

變異數

傳回指定欄位的數值變異數。

語法:Variance(欄位)

範例:Variance([溫度]) 將傳回該欄位中所有溫度的平均溫度的離散程度量測值。

相關項目:標準差平均值

不支援 Variance 的資料庫:Druid、SQLite。

函數

函數運算式適用於每個個別值。它們可用於變更或篩選欄位中的值,或建立新的自訂欄位。

邏輯函數

邏輯函數會判斷條件是否滿足,或判斷要根據條件傳回哪個值。

介於

如果日期或數字欄位的值落在指定範圍內,則傳回 true。否則傳回 false。

語法:between(欄位, 開始, 結束)

範例:如果您使用運算式 between([建立於], "2019-01-01", "2020-12-31") 進行篩選,Metabase 會傳回針對該運算式傳回 true 的列,在本例中,「建立於」日期落在 2019 年 1 月 1 日到 2020 年 12 月 31 日的範圍內,包括開始日期 (2019-01-01) 和結束日期 (2020-12-31)。

相關項目:間隔

case

case(別名 if)會針對案例列表測試運算式,並傳回第一個相符案例的對應值,如果沒有符合的案例,則傳回選用的預設值。

語法:case(條件, 輸出, …)

範例:case([重量] > 200, "大型", [重量] > 150, "中型", "小型") 如果「重量」為 250,則運算式會傳回「大型」。在本例中,預設值為「小型」,因此任何 重量 150 或更小的值都會傳回「小型」。

coalesce

依序查看每個引數中的值,並傳回每列的第一個非 Null 值。

語法:coalesce(值 1, 值 2, …)

範例:coalesce([評論], [筆記], "無評論")。如果該列的「評論」和「筆記」欄位都為 Null,則運算式會傳回字串「無評論」。

if

ifcase 的別名。針對條件列表測試運算式,並傳回第一個相符案例的對應值,如果沒有符合的案例,則傳回選用的預設值。

語法:if(條件, 輸出, ...)

範例: if([Weight] > 200, "Large", [Weight] > 150, "Medium", "Small") 如果「Weight」為 250,則此運算式會傳回 “Large”。在此情況下,預設值為 “Small”,因此任何「Weight」150 或更小的值都會傳回 “Small”。

isnull

如果欄位為空值 (null),則傳回 true。

語法: isnull(column)

範例: isnull([Tax]) 如果該列的欄位中沒有值,則會傳回 true。

相關: notnullisempty

notnull

如果欄位包含值,則傳回 true。

語法: notnull(column)

範例: notnull([Tax]) 如果該列的欄位中有值,則會傳回 true。

相關: isnullnotempty

數學函數

數學函數實作常見的數學運算。

abs

傳回指定欄位的絕對值(正值)。

語法: abs(column)

範例: abs([Debt])。如果「Debt」為 -100,abs(-100) 會傳回 100

ceil

將小數點向上捨入(ceil,意指天花板)。

語法: ceil(column)

範例: ceil([Price])ceil(2.99) 會傳回 3。

相關: floorround

exp

傳回 歐拉數 e,其次方為提供的數字。(Euler 的發音類似 “Oy-ler”)。

語法: exp(column)

範例: exp([Interest Months])

相關: power

floor

將小數點向下捨去。

語法: floor(column)

範例: floor([Price])。如果「Price」為 1.99,此運算式會傳回 1。

相關: ceilround

log

傳回數字的以 10 為底的對數。

語法: log(column)

範例: log([Value])

power

將數字提高到指數值的次方。

語法: power(column, exponent)

範例: power([Length], 2)。如果長度為「3」,此運算式會傳回「9」(3 的二次方為 3*3)。

不支援 power 的資料庫:SQLite。

相關: exp

round

將小數點數字四捨五入到最接近的整數值。

語法: round(column)

範例: round([Temperature])。如果溫度為攝氏「13.5」度,此運算式會傳回「14」。

範例: round([Temperature] * 10) / 10。如果溫度為「100.75」,此運算式會傳回「100.8」。

sqrt

傳回值的平方根。

語法: sqrt(column)

範例: sqrt([Hypotenuse])

不支援 sqrt 的資料庫:SQLite。

相關: Power

字串函數

字串函數可操作或驗證字串資料。

concat

將兩個或多個字串組合在一起。

語法: concat(value1, value2, …)

範例: concat([Last Name], ", ", [First Name]) 會產生格式為「Last Name, First Name」的字串,例如「Palazzo, Enrico」。

contains

檢查 string1 是否包含 string2

預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive" 來執行不區分大小寫的比對。

語法: contains(string1, string2) 用於區分大小寫的比對。

contains(string1, string2, "case-insensitive") 用於不區分大小寫的比對。

範例: contains([Status], "Class")

如果「Status」為 “Classified”,此運算式會傳回 true。如果「Status」為 “classified”,此運算式會傳回 false,因為大小寫不符。

相關: doesNotContainregexextract

doesNotContain

檢查 string1 是否包含 string2

預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive" 來執行不區分大小寫的比對。

語法: doesNotContain(string1, string2) 用於區分大小寫的比對。

doesNotContain(string1, string2, "case-insensitive") 用於不區分大小寫的比對。

範例: doesNotContain([Status], "Class")。如果「Status」為 “Classified”,此運算式會傳回 false

相關: containsregexextract

domain

從 URL 或電子郵件中擷取網域名稱。

語法: domain(urlOrEmail)

範例: domain([Page URL])。如果「[Page URL]」欄位的值為 https://metabase.dev.org.twdomain([Page URL]) 會傳回 metabasedomain([Email]) 會從 hello@metabase.com 擷取 metabase

相關: hostsubdomain

endsWith

如果文字的結尾與比較文字相符,則傳回 true。

預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive" 來執行不區分大小寫的比對。

語法: endsWith(text, comparison) 用於區分大小寫的比對。

endsWith(text, comparison, "case-insensitive") 用於不區分大小寫的比對。

範例: endsWith([Appetite], "hungry")

相關: startsWithcontainsdoesNotContain

host

從 URL 或電子郵件中擷取主機,即網域和 TLD。

語法: host(urlOrEmail)

範例: host([Page URL])。如果「[Page URL]」欄位的值為 https://metabase.dev.org.twhost([Page URL]) 會傳回 metabase.comhost([Email]) 會從 hello@metabase.com 擷取 metabase.com

相關: domainsubdomain

in

如果 value1 等於 value2(或 value3 等,如果已指定),則傳回 true。

in(value1, value2, ...)

value1 是要檢查的欄位或值。

value2, ... 是要檢查的欄位或值清單。

相關: containsstartsWithendsWith

isempty

如果字串欄位包含空字串或為空值,則傳回 true。在非字串欄位上呼叫此函數會導致錯誤。您可以針對非字串欄位使用 isnull

語法: isempty(column)

範例: isempty([Feedback]) 如果「Feedback」是空字串('')或不包含值,則會傳回 true。

相關: notemptyisnull

ltrim

從文字字串中移除開頭的空格。

語法: ltrim(text)

範例: ltrim([Comment])。如果註解為「 I'd prefer not to」,ltrim 會傳回「I'd prefer not to」。

相關: trimrtrim

length

傳回文字中的字元數。

語法: length(text)

範例: length([Comment])。如果「comment」為 “wizard”,length 會傳回 6(“wizard” 有六個字元)。

lower

傳回全部小寫的文字字串。

語法: lower(text)

範例: lower([Status])。如果「Status」為 “QUIET”,此運算式會傳回 “quiet”。

相關: upper

notempty

如果字串欄位包含的值不是空字串,則傳回 true。在非字串欄位上呼叫此函數會導致錯誤。您可以針對非字串欄位使用 notnull

語法: notempty(column)

範例: notempty([Feedback]) 如果「Feedback」包含的值不是空字串(''),則會傳回 true。

相關: isemptyisnullnotnull

regexextract

⚠️ regexextract 不適用於 MongoDB、SQLite 和 SQL Server。對於 Druid,regexextract 僅適用於 Druid-JDBC 驅動程式。

根據正規表示式擷取相符的子字串。

語法: regexextract(text, regular_expression)

範例: regexextract([Address], "[0-9]+")

不支援 regexextract 的資料庫:H2、SQL Server、SQLite。

相關: containsdoesNotContainsubstring

replace

將輸入文字中所有出現的搜尋文字取代為取代文字。

語法: replace(text, find, replace)

範例: replace([Title], "Enormous", "Gigantic")

rtrim

從文字字串中移除結尾的空格。

語法: rtrim(text)

範例: rtrim([Comment])。如果註解為 “Fear is the mindkiller. “,則此運算式會傳回 “Fear is the mindkiller.”

相關: trimltrim

startsWith

如果文字的開頭與比較文字相符,則傳回 true。預設執行區分大小寫的比對。您可以傳遞選用參數 "case-insensitive" 來執行不區分大小寫的比對。

語法: startsWith(text, comparison) 用於區分大小寫的比對。

startsWith(text, comparison, "case-insensitive") 用於不區分大小寫的比對。

範例: startsWith([Course Name], "Computer Science") 對於開頭為 “Computer Science” 的課程名稱(例如 “Computer Science 101: An introduction”)會傳回 true。

對於 “Computer science 201: Data structures” 會傳回 false,因為 “science” 的大小寫與比較文字中的大小寫不符。

startsWith([Course Name], "Computer Science", "case-insensitive") 對於 “Computer Science 101: An introduction” 和 “Computer science 201: Data structures” 都會傳回 true。

相關: endsWithcontainsdoesNotContain

subdomain

從 URL 擷取子網域。忽略 www(傳回空白字串)。

語法: subdomain(url)

範例: subdomain([Page URL])。如果「[Page URL]」欄位的值為 https://status.metabase.comsubdomain([Page URL]) 會傳回 status

相關: hostdomain

substring

傳回提供的文字的一部分,由起始位置和長度指定。

語法: substring(text, position, length)

範例: substring([Title], 1, 10) 傳回字串的前 10 個字母(字串索引從位置 1 開始)。

相關: regexextractreplace

trim

從文字字串中移除開頭和結尾的空格。

語法: trim(text)

範例: trim([Comment]) 將移除註解兩側的任何空格字元。

upper

傳回全部大寫的文字。

語法: upper(text)

範例: upper([Status])。如果 status 為 “hyper”,upper("hyper") 會傳回 “HYPER”。

日期函數

日期函數可操作、擷取或建立日期和時間值。

convertTimezone

將日期或時間戳記值移至指定的時區。

語法: convertTimezone(column, target, source)

範例: convertTimezone("2022-12-28T12:00:00", "Canada/Pacific", "Canada/Eastern") 會傳回值 2022-12-28T09:00:00,顯示為 2022 年 12 月 28 日,上午 9:00

請參閱 convertTimezone 的資料庫限制

datetimeAdd

將一些時間單位新增至日期或時間戳記值。

語法: datetimeAdd(column, amount, unit)

範例: datetimeAdd("2021-03-25", 1, "month") 會傳回值 2021-04-25,顯示為 2021 年 4 月 25 日

amount 必須是整數,而不是小數。例如,您無法新增「半年」(0.5)。

相關: betweendatetimeSubtract

datetimeDiff

傳回兩個日期時間之間以某個時間單位表示的差異。例如,datetimeDiff(d1, d2, "day") 會傳回 d1d2 之間的天數。

語法: datetimeDiff(datetime1, datetime2, unit)

範例: datetimeDiff("2022-02-01", "2022-03-01", "month") 會傳回 1

請參閱 datetimediff 的資料庫限制

datetimeSubtract

從日期或時間戳記值中減去一些時間單位。

語法: datetimeSubtract(column, amount, unit)

範例: datetimeSubtract("2021-03-25", 1, "month") 會傳回值 2021-02-25,顯示為 2021 年 2 月 25 日

amount 必須是整數,而不是小數。例如,您無法減去「半年」(0.5)。

相關: betweendatetimeAdd

day

取得日期時間並傳回月份中的日,以整數表示。

語法: day([datetime column])

範例: day("2021-03-25T12:52:37") 會以整數形式傳回日,25

dayName

根據星期幾的數字 (1-7) 傳回星期幾的當地語言名稱。遵循每週的第一天設定

語法: dayName(dayNumber)

範例: dayName(1) 會傳回 星期日,除非您變更每週的第一天設定

相關: quarterNamemonthName

hour

取得日期時間並傳回小時,以整數表示 (0-23)。

語法: hour([datetime column])

範例: hour("2021-03-25T12:52:37") 會傳回 12

interval

檢查日期欄位的值,以查看是否在相對範圍內。

語法: interval(column, number, text)

範例: interval([Created At], -1, "month")

number 必須是整數。您不能使用小數值。

相關: between

minute

取得日期時間並傳回分鐘,以整數表示 (0-59)。

語法: minute([datetime column])

範例: minute("2021-03-25T12:52:37") 會傳回 52

month

取得日期時間並傳回月份數字 (1-12),以整數表示。

語法: month([datetime column])

範例: month("2021-03-25T12:52:37") 會以整數形式傳回月份,3

monthName

傳回指定月份的當地語言簡稱。

語法: monthName([Birthday Month])

範例: monthName(10) 會傳回 Oct 代表十月。

相關: dayNamequarterName

now

使用您的 Metabase 報告時區傳回目前的日期和時間。

語法: now

quarter

取得日期時間並傳回一年中的季度編號 (1-4),以整數表示。

語法: quarter([datetime column])

範例: quarter("2021-03-25T12:52:37") 會針對第一季傳回 1

quarterName

給定季度編號 (1-4),傳回類似 Q1 的字串。

語法: quarterName([Fiscal Quarter])

範例: quarterName(3) 會傳回 Q3

相關: dayNamemonthName

relativeDateTime

取得相對於目前時間的時間戳記。

語法: relativeDateTime(number, text)

number:間隔期間,負值表示過去的時間。「number」必須是整數。您不能使用小數值。

text:間隔類型,例如「"day"」、「"month"」、「"year"

relativeDateTime 只能在條件運算式中使用。

範例: [Orders → Created At] < relativeDateTime(-30, "day") 將篩選出在目前日期 30 天前建立的訂單。

相關: datetimeAdddatetimeSubtract

second

取得日期時間並傳回分鐘中的秒數 (0-59),以整數表示。

語法: second([datetime column])

範例: second("2021-03-25T12:52:37") 會傳回整數 37

timeSpan

取得指定長度的時間間隔。

語法: timeSpan(number, text)

number:間隔期間,負值表示過去的時間。「number」必須是整數。您不能使用小數值。

text:間隔類型,例如「"day"」、「"month"」、「"year"

範例: [Orders → Created At] + timeSpan(7, "day") 會傳回「Created At」日期後 7 天的日期。

week

取得日期時間並傳回週數,以整數表示。

語法: week(column, mode)

範例: week("2021-03-25T12:52:37") 會以整數形式傳回週數,12

  • 欄位:日期或日期時間值的欄位名稱。
  • 模式:選用。
    • ISO:(預設)第 1 週從一月份第一個星期四之前的星期一開始。
    • 美國:第 1 週從 1 月 1 日開始。所有其他週從星期日開始。
    • 執行個體:第 1 週從 1 月 1 日開始。所有其他週從 Metabase 當地語系化設定中定義的日期開始。

請注意,在查詢產生器中依年份的週進行摘要時,會使用不同的模式來判斷第一週,請參閱年份的週以取得更多資訊。

weekday

取得日期時間並傳回整數 (1-7),表示星期幾的數字。

語法: weekday(column)

  • 欄位:日期時間欄位。

範例

case(
  weekday([Created At]) = 1, "Sunday",
  weekday([Created At]) = 2, "Monday",
  weekday([Created At]) = 3, "Tuesday",
  weekday([Created At]) = 4, "Wednesday",
  weekday([Created At]) = 5, "Thursday",
  weekday([Created At]) = 6, "Friday",
  weekday([Created At]) = 7, "Saturday")

year

取得日期時間並傳回年份,以整數表示。

語法: year([datetime column])

範例: year("2021-03-25T12:52:37") 會以整數形式傳回年份 2021,2021

視窗函數

視窗函數只能在「摘要」區段中使用。它們不能用於建立自訂欄位或自訂篩選條件。

累加計數

如需更多資訊,請查看我們的累積函數頁面。

跨越分類的列的累加總計。

語法: CumulativeCount

範例: CumulativeCount

累加總和

如需更多資訊,請查看我們的累積函數頁面。

跨越分類的欄位的滾動總和。

語法: CumulativeSum(column)

範例: CumulativeSum([Subtotal])

相關: SumSumIf

位移

⚠️ Offset 函數目前不適用於 MySQL/MariaDB、MongoDB 和 Druid。

如需更多資訊,請查看我們的 Offset 頁面。

傳回不同列中運算式的值。Offset 只能在查詢產生器的「摘要」步驟中使用(您不能使用 Offset 來建立自訂欄位)。

語法: Offset(expression, rowOffset)

expression 是要從不同列取得的值。

rowOffset 是相對於目前列的數字。例如,-1 代表前一列,或 1 代表下一列。

範例: Offset(Sum([Total]), -1) 會從前一列取得 Sum([Total]) 值。

限制

資料庫限制

上方和此處已摘要說明每個彙總和函數的限制

H2(包括 Metabase 範例資料庫):MedianPercentileconvertTimezoneregexextract

AthenaconvertTimezone

DatabricksconvertTimezone

DruidMedianPercentileStandardDeviationpowerlogexpsqrtOffset。函數 regexextract 僅適用於 Druid-JDBC 驅動程式。

MongoDBMedianPercentilepowerlogexpsqrtOffsetregexextract

MariaDBMedianPercentileOffset

MySQLMedianPercentileOffset

PrestoconvertTimezone。僅針對 MedianPercentile 提供近似結果。

RedshiftAverage 將針對整數欄位傳回 整數結果

SparkSQLconvertTimezone

SQL ServerMedianPercentileregexextract

SQLiteexplogMedianPercentilepowerregexextractStandardDeviationsqrtVariance

VerticaMedianPercentile

如果您正在使用或維護協力廠商資料庫驅動程式,請參閱 wiki,以瞭解您的驅動程式可能會受到什麼影響。

請查看我們關於查詢產生器中的自訂運算式教學課程,以瞭解更多資訊。

閱讀其他Metabase 版本的文件。