拥有创建自定义字段的权限后,您可以为维度创建临时自定义组,而无需在查找器表达式中使用逻辑函数,也不必在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 ;;
}