如果您拥有创建自定义字段的权限,就可以为维度创建临时自定义群组,而无需在 Looker 表达式中使用逻辑函数,或在sql
参数或type: case
字段中开发CASE WHEN
逻辑。
您还可以为数字类型维度创建临时自定义分箱,而无需在 Looker 表达式中使用逻辑函数,或者在您具有创建自定义字段的权限时开发 type: tier
LookML 字段。
分桶对于在 Looker 中创建自定义分组维度非常有用。
在 Looker 中创建存储桶的方法有三种:
使用 tier
进行分桶
如需创建整数分桶,我们只需将 dimension
类型定义为 tier
:
dimension: users_lifetime_orders_tier { type: tier tiers: [0,1,2,5,10] sql: ${users_lifetime_orders} ;; }
您可以使用 style
参数自定义探索时层级的显示方式。style
的四个选项如下:
例如:
dimension: age_tier { type: tier tiers: [0,10,20,30,40,50,60,70,80] style: integer sql: ${age} ;; }
style
参数 classic
是默认参数,采用 Tx[x,x]
格式,其中 Tx
表示层级编号,[x,x]
表示范围。下图显示的是“探索”数据表格,其中用户数按用户年龄分组:
下图显示了其他 style
参数选项的示例:
-
interval
- 格式为[x,x]
,表示层级的最低值和最高值 -
integer
- 采用x to x
格式,表示层级的最低值和最高值 -
relational
- 格式为>= x and <x
,表示值大于或等于最低层级值,小于最高层级值
需要考虑的事项
将 tier
与维度填充结合使用可能会导致层级分桶不符合预期。
例如,启用维度填充后,type: tier
维度“年龄段”将显示“低于 0 岁”和“0 到 9 岁”的层级分桶,但数据不包含这些分桶的年龄值:
为年龄层级停用维度填充后,这些范围可以更准确地反映数据中的可用年龄值(从范围 10 到 19 开始):
如需启用或停用维度填充功能,请将鼠标悬停在“探索”中的维度名称上,点击字段级别的齿轮图标,然后选择移除填充的层级值以停用,或选择填充缺失的层级值以启用。
如需详细了解 Looker tiers
,请参阅维度、过滤条件和参数类型文档页面。
使用 case
进行分桶
您可以使用 case
参数创建具有自定义排序的自定义命名存储分区。建议为固定的一组存储桶使用 case
参数,因为它有助于控制值在界面过滤条件和可视化图表中的呈现方式、排序方式和使用方式。例如,使用 case
时,用户将只能选择过滤条件中定义的分桶值。
如需使用 case
创建范围,您可以定义一个维度,例如为订单金额定义一个范围:
dimension: order_amount_bucket { case: { when: { sql: ${order_amount} <= 50;; label: "Small" } when: { sql: ${order_amount} > 50 AND ${order_amount} <= 150;; label: "Medium" } when: { sql: ${order_amount} > 150;; label: "Large" } else:"Unknown" } }
case
参数通常会按照分桶的列出顺序对值进行排序。对于 order_amount_bucket
维度,分桶的顺序为小、中和大:
如果您想按字母数字排序,请添加 alpha_sort
参数
附加到维度,如下所示:
dimension: order_amount_bucket { alpha_sort: yes case: { when: { sql: ${order_amount} <= 50;; label: "Small" } when: { sql: ${order_amount} > 50 AND ${order_amount} <= 150;; label: "Medium" } when: { sql: ${order_amount} > 150;; label: "Large" } else:"Unknown" } }
对于希望输出中包含许多不同的值(这需要您使用 WHEN
或 ELSE
语句定义每个输出),或者希望实现更复杂的 ELSE
语句的维度,我们建议您使用 SQL CASE WHEN
(下一部分将对此进行介绍)。
如需详细了解 case
参数,请参阅字段参数文档页面。
使用 SQL CASE WHEN
进行分桶
建议使用 SQL CASE WHEN
语句进行更复杂的分桶,或实现更细致的 ELSE
语句。
例如,您可能希望根据订单的目的地使用不同的分桶方法。SQL CASE WHEN
语句可用于创建复合分桶维度,其中 THEN
语句会返回维度而非字符串:
dimension: compound_buckets { sql: CASE WHEN ${orders.destination} = 'US' THEN ${us_buckets} WHEN ${orders.destination} = 'CA' THEN ${canada_buckets} ELSE ${intl_buckets} END ;; }