维度、过滤条件和参数类型

此页面指的是属于维度或过滤条件的 type 参数。

type 还可以用作指标的一部分,如指标类型文档页面中所述。

type 还可以用作维度组的一部分,如 dimension_group 参数文档页面中所述。

用法

view: view_name {
  dimension: field_name {
    type: field_type
  }
}
层次结构
type
可能的字段类型
维度、过滤条件、参数

默认值
string

接受
维度、过滤条件或参数类型

此页面详细介绍了可分配给 dimension、filter 或 parameter 的各种类型。维度、过滤条件或参数只能有一种类型,如果未指定类型,则默认为 string。

某些类型具有支持参数,这些参数将在相应部分中进行说明。

类型定义

D = 维度
DG = 维度组
F = 过滤条件
P = 形参
类型 说明 有效的字段类型
bin 添加了 21.14 对于将数值分组为多个范围的字段 D
date 对于包含日期的字段 D F P
date_time 对于包含日期和时间的字段 D F P
distance 对于计算两个 type: location 维度之间最直接路径(“直线距离”)的字段 D
duration 与 dimension_group 搭配使用,可根据单个表列创建多个基于时长的维度。如需了解维度组,请参阅 dimension_group 参数文档页面。 DG
location 对于基于经纬度且将用于可视化的字段 D
number 对于包含数字的字段 D F P
string 对于包含字母或特殊字符的字段 D F P
tier 对于将数值分组为多个范围的字段 D
time 与 dimension_group 搭配使用,可根据单个表列创建多个基于时间的维度。如需了解维度组,请参阅 dimension_group 参数文档页面。 DG
unquoted 对于值将直接插入到 SQL 中的 parameter 字段,不应添加英文引号(与 type: string 的情况不同) P
yesno 对于显示某项内容是 true 还是 false 的字段 D F P
zipcode 对于包含邮政编码且将用于可视化图表的字段 D
各个时间和日期类型 一种很少使用的替代方法,可用于创建单个基于时间的维度,替代方法为 type: time D F
各个时长类型 一种很少使用的替代方案,可用于创建计算时间差的单个基于时间的维度,替代方案为 type: duration D
int 移除了 5.4 已替换为 type: number D

bin

type: bin 是 type: tier 的别名。这两种类型可以互换使用。

type: bin 与 bins 参数搭配使用,可将数值维度划分为一组数值范围。例如,您可以将年龄维度分箱为不同的年龄范围。您可以使用 style 参数更改箱在 Looker 界面中的显示方式。

使用模式如下:

view: view_name {
  dimension: field_name {
    type: bin
    bins: [numeric_value, numeric_value, ... ]
    style: interval
    sql: ${my_field_name} ;;
  }
}

对于 type: bin 维度,sql 参数可以采用任何计算结果为数字或整数的有效 SQL 表达式。

以下是使用年龄的示例:

dimension: age_bin {
  type: bin
  bins: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
  style: interval
  sql: ${age} ;;
}

有关此参数在 Looker 界面中的显示方式,请参阅本页上的 type: tier 参数的 style 部分。

bin 类型是 type: tier 的别名。这两种类型可以互换使用,并且行为相同:

  • style 子参数用于自定义 Looker 界面中箱的外观。
  • Dimensions of type: bin 无法在自定义过滤条件中使用。
  • 将 type: bin 与维度填充搭配使用可能会导致出现意外的层级分桶。

distance

type: distance 用于计算两个 type: location 维度之间最直接路径(直线距离)的距离。

系统会排除 type: distance 维度的 sql 参数。您需要在 start_location_field 和 end_location_field 参数中提供对 type: location 维度的引用。

用法如下:

view: view_name {
  dimension: field_name {
    type: distance
    start_location_field: field_name_1
    end_location_field: field_name_2
    units: kilometers
  }
}

距离单位由 units 参数确定,该参数可采用以下值:

  • feet
  • kilometers
  • meters
  • miles
  • nautical_miles
  • yards

例如,您可以按如下方式计算客户前往取车点取车的距离:

dimension: distance_to_pickup {
  type: distance
  start_location_field: customer.home_location
  end_location_field: rental.pickup_location
  units: miles
}

计算出的距离将是两点之间的最直接路径,不一定是道路行驶距离。

请勿在 start_location_field 和 end_location_field 参数中使用 ${view_name.field_name} 语法。请改为单独使用视图名称和字段名称,例如 view_name.field_name。

duration

type: duration 与 dimension_group 结合使用,可创建一组维度和/或 SQL 表达式之间的计算时间差。

type: duration 仅适用于 dimension_group,而不适用于常规 dimension。不过,您可以指定基于时长的各个维度,如各个时长类型中所述。

如需了解包含 type: duration 的维度组,请参阅 dimension_group 参数文档页面。

location

type: location 与 sql_latitude 和 sql_longitude 参数搭配使用,可创建要在地图或静态地图(点)可视化图表(使用州/省或国家/地区字段创建静态地图(区域))中绘制的坐标,或要在 type: distance 计算中使用的坐标。

使用模式如下:

view: view_name {
  dimension: field_name {
    type: location
    sql_latitude:${field_name_1} ;;
    sql_longitude:${field_name_2} ;;
  }
}

系统会排除 type: location 维度的 sql 参数。您需要改为向 sql_latitude 和 sql_longitude 参数提供任何有效的 SQL 表达式,以生成十进制纬度或经度。这些表达式通常是对包含纬度或经度信息的 LookML 字段的引用,但如果您想使用总部的位置或类似位置,也可以使用静态值。

例如,您可以创建如下所示的 store_location 维度:

dimension: store_location {
  type: location
  sql_latitude: ${store_latitude} ;;
  sql_longitude: ${store_longitude} ;;
}

如果您不想绘制位置或计算距离,可以使用更简单的字段类型,例如 type: number。当您在表格中查看某个位置时,Looker 会显示数据库中的相应值,并自动生成指向 Google 地图中该位置的链接。

location 支持的数据库方言

为了让 Looker 在您的 Looker 项目中支持 type: location,您的数据库方言也必须支持它。下表显示了在最新版 Looker 中哪些方言支持 type: location:

方言 是否支持?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

number

type: number 可与数字或整数搭配使用。

对于 type: number 维度,sql 参数可以采用任何计算结果为数字或整数的有效 SQL 表达式。

您可以使用 value_format 或 value_format_name 参数设置 type: number 字段的格式。

例如,以下 LookML 基于 revenue 和 cost 字段创建了一个名为 profit 的字段,然后以货币格式(1,234.56 美元)显示该字段:

dimension: profit {
  type: number
  sql: ${revenue} - ${cost} ;;
  value_format_name: usd
}

维度只能对其他维度执行算术运算,而不能对度量执行算术运算。此外,即使您使用 type: number 维度来显示 ID 号,系统也不会向用户提供建议。

string

type: string 通常用于包含字母或特殊字符的字段。它也可以与数字字段搭配使用,但如果您改用 type: number,Looker 会提供更好的数字处理功能。

type: string 维度的 sql 参数可以采用任何有效的 SQL 表达式。

例如,以下 LookML 通过组合名为 first_name 和 last_name 的字段来创建字段 full_name:

dimension: full_name {
  type: string
  sql: CONCAT(${first_name}, ' ', ${last_name}) ;;
}

在此示例中,可以省略 type: string,因为 string 是 type 的默认值。

tier

您可以使用 type: bin 作为 type: tier 的别名。这两种类型可以互换使用。

type: tier 与 tiers 参数搭配使用,可将数字维度划分为一组数字范围。例如,您可以将年龄维度分层为不同的年龄范围。您可以使用 style 参数更改层级在 Looker 界面中的显示方式。

使用模式如下:

view: view_name {
  dimension: field_name {
    type: tier
    tiers: [numeric_value, numeric_value, ... ]
    style: interval
    sql: ${my_field_name} ;;
  }
}

对于 type: tier 维度,sql 参数可以采用任何计算结果为数字或整数的有效 SQL 表达式。

年龄示例可能如下所示:

dimension: age_tier {
  type: tier
  tiers: [0, 10, 20, 30, 40, 50, 60, 70, 80]
  style: classic # the default value, could be excluded
  sql: ${age} ;;
}

本页的 style 部分介绍了此功能在 Looker 界面中的显示方式。

type: tier 的维度无法在自定义过滤条件中使用。

style

借助 style 参数,您可以更改分层在 Looker 界面中的显示方式。虽然以下各部分的示例中未显示负数,但如果数据中存在负数,则会有一个起始层级,其中包含从负无穷大到 0(不含)之间的所有数字。有以下四种可能的值:

classic

默认值为 style: classic,如下所示:

用户年龄段(传统) 用户数
T02 [10,20) 949
T03 [20,30) 2,161
T04 [30,40) 2,114
T05 [40,50) 2,081
T06 [50,60) 2,024
T07 [60,70) 1,511
T08 [70,inf) 1,450

  • 您可以按如下方式解读此层级表示法:
    • T02 [10,20) 是指包含 10,但不包含 20 的范围
    • T09 [80,inf) 是包含 80 且上限为无穷大的范围

interval

style: interval 与 style: classic 类似,但没有开头的 TXX 标签。它看起来像这样:

用户年龄段(区间) 用户数
[10,20) 949
[20,30) 2,161
[30,40) 2,114
[40,50) 2,081
[50,60) 2,024
[60,70) 1,511
[70,inf) 1,450

integer

style: integer 必须与离散的整数值(例如年龄)搭配使用。如果您尝试使用非整数来定义层级,系统会显示错误。此样式的格式如下:

用户年龄段(整数) 用户数
10 到 19 人 949
20 至 29 2,161
30 至 39 2,114
40 至 49 2,081
50 至 59 2,024
60 至 69 1,511
70 或更高 1,450

relational

style: relational 最适合用于连续数字(例如美元),其格式如下所示:

用户年龄段(关联型) 用户数
>=10 且 < 20 949
>=20 且 < 30 2,161
>=30 且 < 40 2,114
>=40 且 < 50 2,081
>=50 且 < 60 2,024
>=60 且 < 70 1,511
>=70 1,450

您还可以使用 value_format 为层级设置样式。例如:

dimension: amount_tier {
  type: tier
  tiers: [0, 10, 20, 30, 40, 50, 60, 70, 80]
  style: integer
  sql: ${amount} ;;
  value_format: "$#,##0"
}

此示例将生成 $10 to $19、$20 to $29 等层级标签。

注意事项

将 tier 与维度填充搭配使用可能会导致出现意外的层级分桶。

例如,如果维度为 type: tier(年龄段),则在启用维度填充功能后,即使数据不包含“低于 0”和“0 至 9”这两个年龄段的数据,系统也会显示这两个年龄段的桶:

用户年龄段
低于 0
0 至 9
10 到 19 人
20 至 29
30 至 39
40 至 49
50 至 59
60 至 69
70 至 79
80 或更高

如果停用年龄段的维度填充,各个分桶将更准确地反映数据中可用的年龄值:

用户年龄段
10 到 19 人
20 至 29
30 至 39
40 至 49
50 至 59
60 至 69
70 至 79
80 或更高

您可以通过以下方式启用或停用维度填充:在“探索”中将鼠标悬停在维度名称上,点击字段级齿轮图标,然后选择移除填充的层级值以停用,或选择填充缺失的层级值以启用。

time

type: time 与 dimension_group 和 timeframes 参数结合使用,可创建一组基于时间的维度。例如,您可以基于单个时间戳列创建日期、周和月份维度。

type: time 仅适用于 dimension_group,而不适用于常规 dimension。不过,您可以指定各个基于时间的维度,如各个时间和日期类型部分中所述。

如需了解维度组,请参阅 dimension_group 参数文档页面,其中还包含有关 timeframes、convert_tz 和 datatype 参数的信息,以及使用基于时间的数据时需要考虑的常见挑战和注意事项。

unquoted

type: unquoted 仅与 parameter 字段搭配使用。unquoted 类型与 type: string 类似,不同之处在于,当 parameter 的值插入到 {% parameter %} Liquid 变量中时,不会添加引号。这在将值插入到 SQL(例如列名或表名)时非常有用,因为这些值不能添加引号才能正常运行。

直接将未加引号的值插入到 SQL 中可能会导致出现不必要的 SQL 操作。为解决此问题,type: unquoted 的参数值仅限使用 A 到 Z 和 0 到 9 之间的字符(不得包含空格或其他特殊字符)。

例如,以下 LookML 会创建一个名为 table_name 的 parameter,该 parameter 将生成不带引号的值:

parameter: table_name {
  type: unquoted
}

yesno

type: yesno 会创建一个字段,用于指明某个事物是 true 还是 false。这些值在探索界面中显示为是和否。

type: yesno 维度的 sql 参数接受计算结果为 TRUE 或 FALSE 的有效 SQL 表达式。如果条件计算结果为 TRUE,系统会向用户显示是;否则,系统会显示否。

type: yesno 维度的 SQL 表达式不能包含任何聚合。这意味着它不能包含 SQL 聚合或对 LookML 度量的任何引用。如果您想创建包含 SQL 聚合或引用 LookML 度量的 yesno 字段,请使用带有 type: yesno 的度量,而不是维度。

例如,以下 LookML 会创建一个字段,用于根据 status 字段指示订单是否已付款:

dimension: is_order_paid {
  type: yesno
  sql: ${status} = 'paid' ;;
}

如需在其他字段中引用 type: yesno 字段,请将 type: yesno 字段视为布尔值(换句话说,就好像它已包含 true 或 false 值)。例如:

dimension: is_big_order {
  type: yesno
  sql: ${order_size} = 'big' ;;
}
# This is correct
measure: total_boxes_needed {
  type: number
  sql: SUM(CASE WHEN ${is_big_order} THEN 2 ELSE 1 END) ;;
}
# This is NOT correct
measure: total_boxes_needed {
  type: number
  sql: SUM(CASE WHEN ${is_big_order} = 'Yes' THEN 2 ELSE 1 END) ;;
}

如果您将 type: yesno 与基于时间的数据搭配使用,则当日期时间有值时,该维度会返回 是;否则会返回否。

zipcode

type: zipcode 与您要绘制在静态地图(点)可视化图表中的邮政编码维度搭配使用(对于静态地图(区域),请使用州或国家/地区字段)。type: zipcode 的任何维度都会自动获得 us_zipcode_tabulation_areas 的 map_layer_name。如果您不想绘制邮政编码,可以使用更简单的类型,例如 type: number。

对于 type: zipcode 维度,sql 参数可以采用任何有效的 SQL 表达式,只要该表达式的结果是五位数的美国邮政编码即可。

为了能够按邮政编码维度进行过滤,某些数据库方言要求邮政编码维度引用的数据库字段是 varchar 或字符串类型的字段,而不是整数类型的字段。

例如:

dimension: zip {
  type: zipcode
  sql: ${TABLE}.zipcode ;;
}

各个时间和日期类型

通常,日期会作为使用 type: time 的 dimension_group 来处理。

您可以为要纳入的每个时间段分别创建一个 dimension 或 filter 字段,而不是在单个 dimension_group 中生成所有这些字段。除非您已在数据库中预先计算时间列,或者想要更改 Looker 时间段命名惯例(例如,将字段命名为 created_date_of_purchase 而不是 created_date),否则一般应避免这样做。

基于时间的可用类型中列出了许多基于时间的个别类型。

举例来说,对于以下 dimension_group 定义:

dimension_group: created {
  type: time
  timeframes: [week, month, year]
  sql: ${TABLE}.created_at ;;
}

您可以将此用作等效的逻辑:

dimension: created_week {
  type: date_week
  sql: ${TABLE}.created_at ;;
}
dimension: created_month {
  type: date_month
  sql: ${TABLE}.created_at ;;
}
dimension: created_year {
  type: date_year
  sql: ${TABLE}.created_at ;;
}

可用的基于时间的类型

以下类型用于单个维度的 type 参数中,以创建基于时间或日期的字段。请勿将这些类型与 dimension_group 文档页面中记录的 timeframe 参数搭配使用。

所有单独的时间和日期类型都需要从数据库中获取时间戳作为输入。

特殊类型

类型 说明 输出示例
date_raw 数据库中的原始值(不含类型转换或时区转换)不会显示在“探索”页面上(通常不需要,除非在联接或时间比较中) 2014-09-03 17:15:00 +0000

时间类型

类型 说明 输出示例
date_time 基础字段的日期时间(某些 SQL 方言会显示数据库中包含的尽可能高的精确度,而其他方言仅显示到秒) 2014-09-03 17:15:00
date_time_of_day 时段 17:15
date_hour 截断为最接近的小时的日期时间 2014-09-03 17
date_hour_of_day 底层字段的整数小时 17
date_hourX 将每一天划分为指定小时数的间隔。 请参阅使用 date_hourX。
date_minute 截断为最接近的分钟的日期时间 2014-09-03 17:15
date_minuteX 将每小时划分为指定分钟数的间隔。 请参阅使用 date_minuteX。
date_second 截断为最接近的秒的日期时间 2014-09-03 17:15:00
date_millisecond 截断为最接近的毫秒的日期时间(如需了解方言支持,请参阅毫秒和微秒的方言支持部分) 2014-09-03 17:15:00.000
date_millisecondX 将每秒拆分为具有指定毫秒数的间隔(如需了解方言支持,请参阅毫秒和微秒的方言支持部分)。 2014-09-01 01:00:00.250
date_microsecond 截断为最接近的微秒的日期时间(如需了解方言支持,请参阅毫秒和微秒的方言支持部分) 2014-09-03 17:15:00.000000

日期类型

类型 说明 输出示例
date 基础字段的日期 2017-09-03
date_date 移除了 4.6 已替换为 date

周类型

类型 说明 输出示例
date_week 相应日期时间中从星期一开始的一周的日期 2017-09-01
date_day_of_week 仅限周几 Wednesday
date_day_of_week_index 周几指数(0 = 周一,6 = 周日) 2

请注意,date_week、date_day_of_week 和 date_day_of_week_index 类型取决于 week_start_day 的值,该值默认为星期一。

月份类型

类型 说明 输出示例
date_month 基础日期时间的年份和月份 2017-09
date_month_num 基础日期时间的月份的整数值 9
date_month_name 月份名称 September
date_day_of_month 一个月中的第几天 3
date_fiscal_month_num 基础日期时间的月份的整数值 9

如需使用 date_fiscal_month_num 类型,必须在模型中设置 fiscal_month_offset 参数。

季度类型

类型 说明 输出示例
date_quarter 基础日期时间的年份和季度 2017-Q3
date_quarter_of_year 季度,前面带有“Q” Q3
date_fiscal_quarter 基础日期时间的财政年度和季度 2017-Q3
date_fiscal_quarter_of_year 年份的财政季度,前面带有“Q” Q3

如需使用 date_fiscal_quarter 和 date_fiscal_quarter_of_year 类型,必须在模型中设置 fiscal_month_offset 参数。

年类型

类型 说明 输出示例
date_year 底层日期时间的整数年份 2017
date_day_of_year 一年中的日 143
date_week_of_year 以数值形式表示的一年中的周数 17
date_fiscal_year 基础日期时间的整数形式的财政年度 2017

如需使用 date_fiscal_year 类型,必须在模型中设置 fiscal_month_offset 参数。

使用 date_hourX

在 date_hourX 中,X 会替换为 2、3、4、6、8 或 12。

这会将每一天划分为指定小时数的间隔。例如,date_hour6 会将每一天划分为 6 小时的时段,如下所示:

  • 2014-09-01 00:00:00
  • 2014-09-01 06:00:00
  • 2014-09-01 12:00:00
  • 2014-09-01 18:00:00

例如,如果某行的 time 为 2014-09-01 08:03:17,则其 date_hour6 为 2014-09-01 06:00:00。

使用 date_minuteX

在 date_minuteX 中,X 会替换为 2、3、5、10、15 或 30。

使用 date_minuteX 会将每小时划分为指定分钟数的间隔。例如,date_minute15 会将每小时拆分为 15 分钟的片段,如下所示:

  • 2014-09-01 01:00:00
  • 2014-09-01 01:15:00
  • 2014-09-01 01:30:00
  • 2014-09-01 01:45:00

举例来说,如果某行的 time 为 2014-09-01 01:17:35,则其 date_minute15 为 2014-09-01 01:15:00。

时区和 convert_tz

一般来说,只有在对已全部转换为同一时区的时间值进行操作时,时间计算(差值、时长等)才能正常运行,因此在编写 LookML 时,请务必注意时区。

Looker 具有多种时区设置,可在不同时区之间转换基于时间的数据。Looker 默认会转换时区。如果您不希望 Looker 对特定维度或维度组执行时区转换,可以使用convert_tz 参数文档页面上介绍的 convert_tz 参数。

对毫秒和微秒的方言支持

Looker 支持精确到微秒;不过,某些数据库仅支持精确到秒。如果数据库遇到比其支持的精度更高的时间类型,则会向上舍入到秒。

在最新版本的 Looker 中,以下方言支持毫秒:

方言 是否支持?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

在最新版 Looker 中,以下方言支持微秒:

方言 是否支持?
Actian Avalanche
Amazon Athena
Amazon Aurora MySQL
Amazon Redshift
Amazon Redshift 2.1+
Amazon Redshift Serverless 2.1+
Apache Druid
Apache Druid 0.13+
Apache Druid 0.18+
Apache Hive 2.3+
Apache Hive 3.1.2+
Apache Spark 3+
ClickHouse
Cloudera Impala 3.1+
Cloudera Impala 3.1+ with Native Driver
Cloudera Impala with Native Driver
DataVirtuality
Databricks
Denodo 7
Denodo 8 & 9
Dremio
Dremio 11+
Exasol
Google BigQuery Legacy SQL
Google BigQuery Standard SQL
Google Cloud AlloyDB for PostgreSQL
Google Cloud PostgreSQL
Google Cloud SQL
Google Spanner
Greenplum
HyperSQL
IBM Netezza
MariaDB
Microsoft Azure PostgreSQL
Microsoft Azure SQL Database
Microsoft Azure Synapse Analytics
Microsoft SQL Server 2008+
Microsoft SQL Server 2012+
Microsoft SQL Server 2016
Microsoft SQL Server 2017+
MongoBI
MySQL
MySQL 8.0.12+
Oracle
Oracle ADWC
PostgreSQL 9.5+
PostgreSQL pre-9.5
PrestoDB
PrestoSQL
SAP HANA
SAP HANA 2+
SingleStore
SingleStore 7+
Snowflake
Teradata
Trino
Vector
Vertica

各个时长类型

通常,时长会作为使用 type: duration 的 dimension_group 来处理。

您可以为要纳入的每个单独时长创建一个 dimension,而不是在单个 dimension_group 中生成所有时长。除非您想更改 Looker 时段命名惯例(例如,将字段命名为送达天数,而不是送达时长),否则一般应避免这样做。

各个时长类型中列出了几种不同的时长类型。

为维度使用时长类型时,您还必须添加 sql_start 和 sql_end 参数,以提供用于计算时间差的开始时间和结束时间。

sql_start 和 sql_end 参数可以采用任何有效的 SQL 表达式,其中包含时间戳、日期时间、日期、纪元或 yyyymmdd 格式的数据。sql_start 和 sql_end 字段可以是以下任一字段:

  • 对现有维度组(属于 type: time)中的 raw 时间范围的引用。
  • 对维度为 type: date_raw 的实体的引用。
  • 一个时间戳 SQL 表达式,例如对时间戳 SQL 列的引用。
  • 一种 SQL 表达式,用于从数据库中提取时间,并使用适合您所用方言的表达式。

举例来说,对于以下 dimension_group 定义:

dimension_group: to_delivery {
  type: duration
  intervals: [day, hour]
  sql_start: ${created_raw} ;;
  sql_end: ${delivered_raw};;
}

您可以将这些 dimension 参数用作逻辑等效参数:

dimension: number_of_days_to_delivery {
  type: duration_day
  sql_start: ${created_raw} ;;
  sql_end: ${delivered_raw};;
}

dimension: number_of_hours_to_delivery {
  type: duration_hour
  sql_start: ${created_raw} ;;
  sql_end: ${delivered_raw};;
}

在探索界面中,这将创建名为送达所需天数和送达所需小时数的维度。

可用的时长类型

以下类型用于单个维度的 type 参数中,以创建基于时长的字段。请勿将这些类型与 dimension_group 文档页面中记录的 intervals 参数搭配使用。

所有单独的时长类型都需要从数据库中获取时间戳作为输入。

类型 说明 输出示例
duration_day 计算以天为单位的时间差 9 days
duration_hour 以小时为单位计算时间差 171 hours
duration_minute 以分钟为单位计算时间差 10,305 minutes
duration_month 计算以月为单位的时间差 3 months
duration_quarter 计算以季度为单位的时间差 2 quarters
duration_second 计算以秒为单位的时间差 606,770 seconds
duration_week 计算以周为单位的时间差 6 weeks
duration_year 计算以年为单位的时间差 2 years