Looker 運算式是您用來執行自訂計算,以及在 Looker 中套用進階邏輯的公式。使用 Looker 運算式建立動態資料表計算、自訂欄位、自訂篩選器和資料測試。這項功能可協助您擷取特定洞察資料,並自訂資料分析。本指南說明如何有效建構及使用 Looker 運算式。
常用函式的快速鍵
建立 Looker 運算式前,請先確認是否能使用內建快速鍵完成工作:
- 資料表計算:如果管理員已授予您建立資料表計算的權限,您可以使用快速計算,在探索的資料表中快速對數值欄位執行常見計算。
- 自訂欄位:如果管理員已授予您建立權限自訂欄位,您可以使用下列項目:
- 自訂群組:將值歸入自訂標籤,不必在
CASE WHEN參數或sql欄位中開發type: case邏輯。 - 自訂特徵分塊:將數值型維度分組至自訂層級,不必開發
type: tierLookML 欄位。
- 自訂群組:將值歸入自訂標籤,不必在
Looker 運算式
Looker 運算式可用於針對下列項目執行計算:
Looker 運算式是由下列元素組合而成:
NULL:值NULL表示沒有資料,可用於檢查某個項目是否為空白或不存在。常數:常數是指您提供的固定值。數字 (例如
7) 或字串 (例如Completed) 都是常數。Looker 欄位:參照 Looker 欄位,包括維度、測量指標和資料表計算。
Looker 運算子:如需可用運算子清單,請參閱「Looker 函式和運算子」。支援的運算子包括下列類別:
- 數學運算子 (例如
+、-、*和/) - 比較運算子 (例如
=、>和<=) - 邏輯運算子 (例如
AND、OR和NOT)
- 數學運算子 (例如
Looker 函式:與試算表函式類似,函式可讓您以複雜的方式轉換資料或參照資料。如需可用函式清單,請參閱「Looker 函式和運算子」。
建立 Looker 運算式
資料表計算、自訂欄位和自訂篩選器都使用 Looker 運算式編輯器。輸入運算式時,Looker 會提示您可能想使用的函式、運算子和欄位名稱。
查看所有建議
在「探索」中建立表格計算、自訂欄位或自訂篩選條件,即可存取 Looker 運算式編輯器。
輸入空格,即可查看所有可供選擇的欄位、函式和運算子清單。如果目前在「探索」中選取某個欄位,Looker 會在該欄位左側顯示黑點,並將該欄位顯示在清單頂端。
在 Looker 運算式編輯器中輸入內容,即可縮短清單,只顯示您感興趣的項目。
如果目前使用的 Explore 欄位與自訂欄位的函式相容,自訂欄位編輯器就會顯示這些欄位。
新增欄位
如要在運算式中加入 Looker 欄位,請開始輸入欄位名稱。輸入時,編輯器會縮小搜尋範圍,列出包含您輸入內容的欄位和函式。您可以輸入欄位名稱 (如「探索」頁面所示),也可以使用 LookML 名稱 (如果知道的話)。
從清單中選取欄位時,Looker 會使用 ${view_name.field_name} 形式的 LookML 名稱,將欄位新增至運算式。這可確保運算式中的所有欄位都有專屬名稱。
新增總計
如果您要根據「探索」建立運算式,且顯示總計,也可以在運算式中加入欄和列的總計。編輯器會顯示欄總計,並在欄位名稱的 LookML 疊代版本前方加上「總計」一詞。舉例來說,如果欄位名稱為「Count」,Looker 會將該欄位的總計資料欄命名為「Count - Total」Count - Total。
總計的 LookML 名稱格式為 ${view_name.field_name:total},其中 :total 會加到欄位名稱結尾。
如要查看資料列總計,編輯器中的欄位名稱前面會顯示「資料列總計」。在欄位的「LookML name」(LookML 名稱) 中,系統會在欄位名稱結尾新增 :row_total,例如 ${view_name.field_name:row_total}。
新增運算子
如需在運算式中加入邏輯運算子 (例如 AND、OR 和 NOT),通常 AND 運算子會先於 OR 運算子評估,但您可以使用括號覆寫此行為。您也可以使用比較運算子 (例如 >、= 和 <=) 和數學運算子 (例如 + 和 *)。
將指標懸停在運算子上時,資訊窗格會顯示正確使用方式的附註。
新增函式
如要在運算式中加入 Looker 函式,請開始輸入函式名稱。輸入時,編輯器會縮小搜尋範圍,只顯示包含您輸入內容的欄位和函式。
函式可能由需要特定型別的引數 (或變數) 構成,例如欄位、數字或「是/否」。將指標懸停在函式上時,請查看資訊窗格中的附註,瞭解需要提供的引數,以及引數的型別。
如需完整函式清單,請參閱「Looker 函式和運算子」。
使用錯誤提示和資訊窗格
Looker 會在 Looker 運算式編輯器旁顯示資訊窗格。這個窗格會提供文件和建議,特別是當運算式含有錯誤時。
資訊窗格會提供下列資訊:
醒目顯示錯誤:Looker 會以紅線標示運算式中不正確的部分。
建議和錯誤詳細資料:Looker 會提供建議,說明運算式中接下來要加入的內容。如果發生錯誤,系統會說明錯誤原因。
說明文件:Looker 會顯示您使用的函式或運算子相關說明文件。舉例來說,當您輸入
if函式的第一個引數時,Looker 會指出第一個引數應評估為yes或no。按一下函式名稱即可查看相關文件。
包括註解
如要在 Looker 運算式中加入註解,請在運算式編輯器中,於註解行的開頭使用 #。
使用欄位
有時您會在運算式中使用欄位的值 (維度、指標或表格計算)。您可能會想將欄位值加到其他項目、檢查欄位值是否為特定值,或將欄位值納入函式。
如「新增欄位」一文所述,您可以在運算式編輯器中輸入欄位名稱,Looker 會協助您找出正確的參照格式。將欄位新增至運算式時,Looker 會使用欄位的 LookML 識別碼,例如 ${view_name.field_name}。輸入欄位名稱 (如欄位挑選器中所示),運算式編輯器會顯示欄位挑選器名稱和 LookML 識別碼。
您可以透過下列幾種方式擷取值:
從同一列取得值:使用欄位最基本的方式是直接參照欄位,例如
${product.category}。這會參照目前資料列中該欄位的值。從其他資料列取得值:您也可以從其他資料列擷取欄位值。舉例來說,如要從前一列取得產品類別,請使用
offset(${product.category}, -1)等偏移函式。如需位置函式清單,請參閱「位置函式」。從透視資料欄取得值:如要從透視資料欄取得值,請使用
pivot_index(${order.total_sales}, 1)等透視函式。如需透視函式清單,請參閱「透視函式」。取得資料列或資料欄的總計:如果您在「探索」中顯示總計,可以將
:total(資料欄總計) 或:row_total(資料列總計) 新增至欄位名稱,藉此取得總計值,格式為${field_name: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 運算式通常包含一或多個函式,用於擷取或計算資料。這項功能類似試算表函式。
函式會以名稱加上括號的形式表示,例如 my_function()。括號內傳遞的值是引數,例如 my_function(argument_1, argument_2)。
舉例來說,now 函式不接受任何引數,並會傳回目前的日期和時間:now()。
round 函式會採用一個數字引數:round(3.2)。結果為 3。
如要瞭解要提供哪些引數,請按照下列步驟操作:
- 運算式編輯器旁的資訊窗格會提供有效函式的說明文件。
- 如需完整函式清單,請參閱「Looker 函式和運算子」。
請參考下列 contains 函式:
| 函式 | 語法 | 目的 |
|---|---|---|
| 包含 {:#function-contains} | contains(string, search_string) |
如果 string 包含 search_string,則傳回 Yes,否則傳回 No。 |
contains 函式需要兩個引數: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函式會傳回意見回饋文字 (如有),否則會傳回留言文字。contains函式會在傳回的文字中搜尋「great」。
從邏輯上來說,這個運算式的意思是:「如果有顧客意見回饋,請在該文字中搜尋。如果沒有,請改為在顧客留言中搜尋。在這兩種情況下,請尋找「great.」一詞。