case

用量

层次结构
case
可能的字段类型
维度

接受
SQL 条件和字符串

特殊规则
如果您希望按字母顺序排列值,请使用 alpha_sort 参数

定义

case 可让您使用大小写逻辑对结果进行分桶。虽然您可以编写原始 SQL CASE 语句,但使用 case 可在 Looker 界面中为您的用户创建下拉菜单。SQL CASE 语句不会创建此类菜单。

case 的通用格式为:

dimension: status {
  case: {
    when: {
      sql: condition ;;
      label: "Label of Condition"
    }
    # possibly more when statements
    else: "Label If No Condition Met"
  }
}

这些参数的工作原理如下:

  • when - 您可使用任意数量的 when 语句,用于表示您希望为其提供标签的各个条件。when 语句会按照从第一个列出到最后一个列出语句的顺序求值,而第一个求值为 true 的 when 语句将分配关联的标签。
  • sql - sql 参数接受求值为 true 或 false 的 SQL 条件。
  • label - 如果 SQL 条件为 true,则此值为要分配的标签。分配的标签的数据类型为 stringcase 语句中每个 label 的值必须是唯一的。如果您为多个 SQL 条件使用相同的 label 值,则系统仅会为 case 语句中的最后一个 SQL 条件分配 label 值。请参阅本页面中的示例
  • else - 如果您未满足所有条件,则这是要使用的标签。

使用 full_suggestions 时,系统向商家用户针对 case 维度提供的建议将不会受到限制。任何用户都可以查看您在 case 参数中添加的任何选项。

使用 alpha_sort 选择标签的排序顺序

通常,case 值会按照您写入的顺序显示。如果您更喜欢按字母顺序排序,可以使用 alpha_sort: yes,如下所示:

dimension: status {
  alpha_sort: yes
  case: { ... }
}

示例

为不同的状态编号分配多个人类可读的标签:

dimension: status {
  case: {
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "pending"
    }
    when: {
      sql: ${TABLE}.status = 1 ;;
      label: "complete"
    }
    when: {
      sql: ${TABLE}.status = 2 ;;
      label: "returned"
    }
    else: "unknown"
  }
}

当同一条件重复并评估为不同的标签时,LookML 使用第一个计算结果为 true 的条件。在以下示例中,${TABLE}.status = 0 的求值结果为 pending,而不是 returned,因为 pending 条件最先求值。

dimension: status {
  case: {
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "pending"
    }
    when: {
      sql: ${TABLE}.status = 1 ;;
      label: "complete"
    }
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "returned"
    }
    else: "unknown"
  }
}

当多个条件评估为同一标签时,LookML 仅使用第一个条件。在以下示例中,Looker 将使用 ${TABLE}.status = 0 而不是 ${TABLE}.status = 2 来生成计算结果为 pending 的 SQL CASE 语句。如果设置为 ${TABLE}.status = 2,则 CASE 语句的计算结果为 unknown

view: orders
dimension: status {
  case: {
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "pending"
    }
    when: {
      sql: ${TABLE}.status = 1 ;;
      label: "complete"
    }
    when: {
      sql: ${TABLE}.status = 2 ;;
      label: "pending"
    }
    else: "unknown"
  }
}