Looker 中的分桶

拥有创建自定义字段的权限后,您可以为维度创建临时自定义组,而无需在查找器表达式中使用逻辑函数,也不必在 sql 参数或 type: case 字段中开发 CASE WHEN 逻辑。
您还可以为数值类型维度创建临时自定义分桶,而无需在 Looker 表达式中使用逻辑函数,也不需要在拥有创建自定义字段的权限的情况下开发 type: tier LookML 字段。

在 Looker 中创建自定义分组维度时,分桶非常有用。

在 Looker 中创建存储分区的方法有三种:

  1. 使用 tier dimension 类型
  2. 使用 case 参数
  3. 在 LookML 字段的 SQL 参数中使用 SQL CASE WHEN 语句

使用 tier 进行分桶

如需创建整数分桶,我们只需将 dimension 类型定义为 tier

dimension: users_lifetime_orders_tier {
  type: tier
  tiers: [0,1,2,5,10]
  sql: ${users_lifetime_orders} ;;
}

您可以使用 style 参数来自定义层级在探索时显示的方式。style 的四个选项如下:

  1. classic
  2. integer
  3. interval
  4. relational

例如:

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] 表示范围。下图显示的是“探索”数据表格,其中用户数用户年龄分组:

数据表格中可用的“用户年龄”层级中排名最高的是 T02[10,20],表示 10 到 20 周岁的用户数量为 808 人。

下图显示了其他 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"
    }
  }

对于希望输出中包含许多不同的值(这需要您使用 WHENELSE 语句定义每个输出),或者希望实现更复杂的 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 ;;
}