Looker 表达式是您用于在 Looker 中执行自定义计算和应用高级逻辑的公式。使用 Looker 表达式创建动态表计算、自定义字段、自定义过滤条件和数据测试。此功能可帮助您提取具体的数据分析,并自定义数据分析。本指南介绍了如何有效地构建和使用 Looker 表达式。
常用函数的快捷方式
在创建 Looker 表达式之前,请检查是否可以使用内置快捷方式完成任务:
- 表格计算:如果管理员已授予您创建表格计算的权限,您可以使用快捷计算快速对探索的数据表中的数字字段执行常见计算。
- 自定义字段:如果管理员已授予您创建自定义字段的权限,您可以使用以下字段:
- 自定义分组:用于将值归入自定义标签下,而无需在
sql参数或type: case字段中编写CASE WHEN逻辑。 - 自定义箱:用于按自定义层级对数值型维度进行分组,而无需开发
type: tierLookML 字段。
- 自定义分组:用于将值归入自定义标签下,而无需在
Looker 表达式
Looker 表达式用于针对以下对象执行计算:
Looker 表达式由以下元素的组合构成:
NULL:值NULL表示没有数据,当您想检查某项内容是否为空或不存在时,此值非常有用。常量:常量是指您提供的不变值。数字(例如
7)或字符串(例如Completed)是常量。Looker 字段:对 Looker 字段的引用,包括维度、测量和表计算。
Looker 运算符:如需查看可用运算符的列表,请参阅 Looker 函数和运算符。 支持的运算符包括以下类别:
- 数学运算符(例如
+、-、*和/) - 比较运算符(例如
=、>和<=) - 逻辑运算符(例如
AND、OR和NOT)
- 数学运算符(例如
Looker 函数:与电子表格函数类似,函数可让您以复杂的方式转换数据或引用数据。如需查看可用函数的列表,请参阅 Looker 函数和运算符。
创建 Looker 表达式
表计算、自定义字段和自定义过滤条件均使用 Looker 表达式编辑器。当您输入表达式时,Looker 会提示您可能要使用的函数、运算符和字段名称。
查看所有建议
在探索中创建表格计算、自定义字段或自定义过滤条件,即可访问 Looker 表达式编辑器。
输入一个空格,即可查看可供选择的所有字段、函数和运算符的列表。如果某个字段当前在“探索”中处于选中状态,Looker 会在该字段的左侧显示一个黑点,并将该字段显示在列表顶部。
在 Looker 表达式编辑器中开始输入内容,以将列表缩短为您感兴趣的项目。
自定义字段编辑器会显示当前正在使用的探索字段(如果它们与自定义字段的功能兼容)。
添加字段
如需在表达式中添加 Looker 字段,请开始输入该字段的名称。随着您的输入,编辑器会将搜索范围缩小到包含您输入内容的字段和函数列表。您可以输入字段在“探索”页面上显示的名称,也可以使用其 LookML 名称(如果您知道的话)。
从列表中选择字段后,Looker 会使用 LookML 名称(格式为 ${view_name.field_name})将其添加到表达式中。这样可确保表达式中的所有字段都具有唯一的名称。
添加总计
如果您要创建基于显示了总计的探索的表达式,还可以在表达式中添加列总计和行总计。列总计会显示在编辑器中,字段名称的 LookML 迭代版本前面带有“总计”字样。例如,对于名为“数量”的字段,Looker 会将该字段的列总和命名为“数量总和”。Count - Total
总计的 LookML 名称采用 ${view_name.field_name:total} 格式,其中 :total 会添加到字段名称的末尾。
对于行总计,编辑器中的字段名称前面会显示“行总计”字样。在字段的 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))。如需查看透视函数列表,请参阅透视函数。获取行或列的总计:如果您在探索中显示了总计,则可以使用
${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 表达式通常包含一个或多个用于检索或计算数据的函数。它们类似于电子表格函数。
函数采用名称后跟圆括号的形式,例如 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”。
从逻辑上讲,此表达式的含义是:“如果有客户反馈,则在该文本中进行搜索。如果找不到,请改为在客户评论中搜索。在这两种情况下,请查找“很好”字样。”