场景

用法

view: view_name {
  dimension: field_name {
    case: {
      when: {
        sql: SQL condition ;;
        label: "value"
      }
      # Possibly more when statements
      else: "value"
    }
    alpha_sort:  yes
  }
}
层次结构
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 语句到最后一个列出的 when 语句的顺序评估这些语句,并将与第一个评估结果为 true 的 when 语句关联的标签分配给相应数据。
  • sql - sql 参数接受计算结果为 true 或 false 的 SQL 条件。
  • label - 如果 SQL 条件为 true,则分配此标签。分配的标签的数据类型为 stringcase 语句中每个 label 的值都必须是唯一的。如果您为多个 SQL 条件使用相同的 label 值,则只有 case 语句中的最后一个 SQL 条件会被分配 label 值。请参阅本页面上的示例
  • else - 如果没有任何条件得到满足,系统将使用此标签。

选择标签的排序顺序 (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 来生成 SQL CASE 语句,该语句的计算结果为 pending。当值为 ${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"
  }
}

注意事项

如果某个维度包含引用其他字段的 case 参数,则该维度所用查询的底层 SQL 中可能会添加该额外字段。如果引用的字段未显示在查询的可视化图表中,并且该可视化图表是手动重新排列列的表格图表,则某些下载格式中的列顺序可能会受到影响。