Looker 中的分桶

如果您拥有创建自定义字段的权限,就可以为维度创建临时自定义群组,而无需在 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],这表示共有 808 名 10 到 20 周岁的用户。

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