Looker 運算式
Looker 運算式 (有時稱為 Lexp) 可用於針對下列項目執行計算:
NULL:值
NULL
表示沒有資料,可用於檢查某個項目是否為空白或不存在。常數:常數是您提供的不會變更的值。數字 (例如
7
) 或字串 (例如Completed
) 都是常數。Looker 欄位:Looker 欄位的參照,包括維度、測量指標和資料表計算。
Looker 運算子:運算子有幾種類型 (請參閱 Looker 函式和運算子說明文件頁面):
- 數學運算子 (例如
+
、-
、*
和/
) - 比較運算子 (例如
=
、>
和<=
) - 邏輯運算子 (例如
AND
、OR
和NOT
)
- 數學運算子 (例如
Looker 函式:這些函式與 Excel 函式類似。您可以透過函式以複雜的方式轉換資料或參照資料。所有可用的函式都列在 Looker 函式和運算子說明文件頁面中。
建立 Looker 運算式
資料表計算、自訂欄位和自訂篩選器會使用 Looker 運算式編輯器。輸入運算式時,Looker 會提示您可能要使用的函式、運算子和欄位名稱。
查看所有建議
建立資料表計算、自訂欄位或自訂篩選器,即可在探索中存取 Looker 運算式編輯器。
輸入空格即可查看可供選擇的所有欄位、函式和運算子的清單。如果目前在「探索」中選取某個欄位,Looker 會在該欄位左側顯示黑點,並在清單頂端顯示該欄位。
開始在 Looker 運算式編輯器中輸入內容,將清單縮減為您感興趣的項目。
如果自訂欄位的函式與 Explore 欄位相容,自訂欄位編輯器會顯示目前使用的 Explore 欄位。
新增欄位
如要在運算式中加入 Looker 欄位,請開始輸入欄位名稱。您輸入內容時,編輯器會將搜尋範圍縮小到包含您輸入內容的欄位和函式清單。您可以輸入「探索」頁面顯示的欄位名稱,如果知道 LookML 名稱,也可以使用該名稱。
從清單中選取欄位後,Looker 會使用 ${view_name.field_name}
格式的 LookML 名稱將該欄位新增至運算式。這可確保所有欄位在運算式中都有專屬名稱。
新增總計
如果您要建立的運算式是以顯示總數的「探索」為基礎,也可以在運算式中加入資料欄和資料列總和。欄總和會顯示在編輯器中,LookML 欄位名稱的迭代項目前方會顯示「Total」字樣。舉例來說,如果欄位名稱為「Count」,Looker 會將該欄位的資料欄總和命名為 Count - Total
。
總和的 LookML 名稱格式為 ${view_name.field_name:total}
,其中 :total
會加到欄位名稱的結尾。
針對資料列總和,編輯器會在欄位名稱前方顯示「Row Totals」字樣;在欄位的 LookML 名稱中,欄位名稱結尾會加上 :row_total
,例如 ${view_name.field_name:row_total}
。
加入運算子
您可以視需要在運算式中加入 AND
、OR
和 NOT
等邏輯運算子。通常 AND
運算子會在 OR
運算子之前評估,但您可以使用括號覆寫這項行為。您也可以使用比較運算子 (例如 >
、=
和 <=
) 和數學運算子 (例如 +
和 *
)。
將游標懸停在運算子上時,資訊窗格會顯示正確使用方式的附註。
加入函式
如要在運算式中加入 Looker 函式,請開始輸入函式名稱。您輸入內容時,編輯器會將搜尋範圍縮小到包含您輸入內容的欄位和函式清單。
函式可能由需要特定類型的引數 (或變數) 建構而成,例如欄位、數字或是/否。當您將游標懸停在函式上時,可以查看資訊窗格中運算式旁邊顯示的附註,瞭解需要提供哪些引數,以及引數的類型。
如要查看 Looker 提供的完整函式清單,請參閱 Looker 函式和運算子說明文件頁面。
使用錯誤提示和資訊窗格
Looker 會在 Looker 運算式編輯器旁顯示資訊窗格。這個窗格會提供說明文件和建議,特別是在運算式中出現錯誤時。
運算式編輯器旁邊的資訊窗格會提供以下資訊:
錯誤醒目顯示:Looker 會以紅色底線標示運算式中尚未正確的部分。
建議和錯誤詳細資料:Looker 會提供建議,說明在運算式中接下來要新增的內容。如果發生錯誤,系統會說明發生錯誤的原因。如果有多個錯誤,系統會根據游標位置顯示錯誤訊息。
說明文件:Looker 會根據游標位置,顯示您正在使用的函式或運算子的說明文件。舉例來說,當您輸入
if()
函式的第 1 個引數時,Looker 會提供第 1 個引數應評估為 true 或 false 的資訊。您可以按一下函式名稱,前往該函式的說明文件。
包括註解
您可以在 Looker 運算式中加入註解,方法是在運算式編輯器中使用 #
開頭註解行。
使用欄位
有時候,您可能會想在運算式中使用欄位 (維度、度量或資料表計算) 的值。您可能會想將欄位值新增至其他項目、檢查欄位是否具有特定值、將值納入函式,或執行其他操作。
如本頁先前所述,您可以將欄位名稱輸入運算式編輯器,Looker 就會協助您找到正確的欄位參照方式。將欄位新增至運算式時,Looker 會使用欄位的 LookML 識別碼,其外觀類似 ${view_name.field_name}
。輸入欄位名稱,欄位挑選器名稱和 LookML 識別碼會一併顯示在運算式編輯器中。
擷取值的方法有很多種:
從同一列取得值:使用欄位最基本的做法就是直接參照。舉例來說,您的運算式可能會使用
${product.category}
。這麼做等於表示「針對任何一列,從該列取得產品類別」。從其他資料列取得值:您也可以從其他資料列取得欄位的值。舉例來說,您可能會想要使用「針對任何指定資料列,從前一個資料列擷取產品類別」的邏輯。如要這麼做,您可以使用偏移函式 (請參閱這份位置函式清單)。偏移函式可能如下所示:
offset(${product.category}, -1)
。從樞紐資料欄取得值:您也可以從樞紐資料欄取得值。舉例來說,您可能會想使用「針對任何指定資料列,從第一個樞紐資料欄取得『銷售總額』」的邏輯。如要使用樞紐資料欄,您必須使用樞紐函式 (請參閱這份樞紐函式清單)。樞紐函式可能如下所示:
pivot_index(${order.total_sales}, 1)
。從資料列或資料欄取得總計:如果您在探索中新增總計,只要使用
${field_name:total}
格式,在欄或列名稱中加入:total
(資料欄總計) 或:row_total
(資料列總計),即可取得總計值。舉例來說,如果您想計算訂單總數的百分比,可以建立如下所示的資料表運算:${orders.count} / ${orders.count:total}
。
使用運算子
Looker 運算式可包含邏輯、比較和數學運算子,用於建立不同的條件:
- 邏輯運算子 (例如
AND
、OR
和NOT
) - 比較運算子 (例如
>
和<
) - 數學運算子 (例如
+
和-
)
除非您使用括號指定其他邏輯,否則系統會先考慮 AND
邏輯,再考慮 OR
邏輯。以下沒有額外括號的運算式:
if (
${order_items.days_to_process}>=4 OR
${order_items.shipping_time}>5 AND
${order_facts.is_first_purchase},
"review", "okay")
會評估為:
if (
${order_items.days_to_process}>=4 OR
(${order_items.shipping_time}>5 AND ${order_facts.is_first_purchase}),
"review", "okay")
在 Looker 中,請使用 yes
和 no
取代 true
和 false
。這些邏輯常數不是 "yes"
和 "no"
這兩個字詞,後者會以引號括住。詳情請參閱邏輯常數說明。
使用函式
Looker 運算式通常包含一或多個函式,可協助您擷取特定資料或計算特定項目。本質上與 Excel 函式相似。
函式名稱後面會加上兩個括號,例如 my_function()
。您可能需要在這些括號內提供資訊,並以半形逗號分隔。這些資訊稱為「引數」,如下所示:my_function(argument_1, argument_2)
。
舉例來說,now
函式不接受任何引數,並提供目前的日期和時間。使用方式如下:now()
。
round
函式會接收一個引數,也就是數字。使用方式如下:round(3.2)
。結果為 3
。
您可以透過兩種方式瞭解需要提供哪些引數 (如果有):
- 資訊窗格會顯示在運算式編輯器旁邊,提供您正在編寫的函式相關說明文件。您可以按一下函式的名稱,前往相關說明文件。
- 您也可以直接前往Looker 函式和運算子說明文件頁面,查詢要使用的函式。
請考慮 contains
函式,其說明文件如下所示:
函式 | 語法 | 目的 |
---|---|---|
包含 | contains(string, search_string) |
如果 string 包含 search_string ,就會傳回 Yes ,否則傳回 No 。 |
您可以看到需要兩個引數。它們分別是 string
和 search_string
,但這並不代表您需要在函式中輸入「字串」和「搜尋字串」這兩個字詞。這些只是引數的名稱,您會用其他內容取代這些名稱。從用途來看,string
應為我們要搜尋的欄位或其他值,而 search_string
則是我們要搜尋的項目。例如:
contains(${customer.feedback_text}, "great")
如果客戶意見回饋中出現「great」一詞,則這個函式會傳回 Yes
的結果。否則,會傳回 No
的結果。
您可以將函式放入其他函式中,以便處理複雜的邏輯。只要內部函式的結果適合外部函式的引數,就會正常運作。例如:
contains(
if(
is_null(${customer.feedback_text}),
${customer.comment_text},
${customer.feedback_text}
),
"great")
is_null
函式會巢狀在 if
函式中,而 if
函式本身則位於 contains
函式中。運作方式如下:
is_null()
函式會檢查顧客意見回饋文字。- 接著,
if()
函式會使用該結果,並傳回顧客意見文字 (如有),或傳回顧客留言文字。 - 最後,
contains()
函式會使用if()
函式傳回的文字,並搜尋「great」一詞。
從邏輯上來說,這個運算式表示:「如果有客戶意見回饋,請搜尋該意見回饋。如果沒有,請改為搜尋顧客的評論。無論是哪種情況,請尋找「great」一詞。