dimension_group

用途

view: view_name {
  dimension_group:  field_name { ... }
}
階層
dimension_group
許可
Looker ID(ディメンション グループによって作成される各ディメンションの名前の最初の部分として使用されます)

特別なルール
  • typetime または duration になります。
  • 通常は timeframes パラメータまたは intervals パラメータとともに使用されます
  • ディメンショングループが日時フィールドに基づいていない場合は datatype パラメータを使用する
  • type: time のディメンショングループで、タイムゾーンの自動変換を無効にする場合は、convert_tz パラメータを使用します。

定義

dimension_group パラメータは、時間ベースまたは期間ベースのディメンションのセットを一度に作成するために使用されます。ディメンション グループを定義すると、ディメンション グループはさまざまな間隔またはタイムフレームの個々のディメンションのセットを作成します。たとえば、タイムスタンプ列に基づいて type: time のディメンション グループを指定すると、ディメンション グループは、時間、日付、週、時間、四半期、年でデータを表す対応するディメンションを作成します。

ディメンショングループの形式と機能は、ディメンショングループの type 値によって異なります。

期間タイプのディメンショングループ

type: duration は、dimension_group と組み合わせて、間隔に基づく duration ディメンションのセットを計算するために使用されます。

type: duration のディメンショングループの形式は次のとおりです。

dimension_group: dimension_group_name {
  type: duration
  sql_start: SQL expression ;;  # often this is a single database column
  sql_end: SQL expression ;;  # often this is a single database column
  intervals: [interval, interval, …] # see following explanation for valid intervals
}

type: duration のディメンション グループの場合:

  • sql_start パラメータと sql_end パラメータは、期間の開始時刻と終了時刻を定義する SQL 式を提供します。詳しくは、このページの期間の開始と終了の定義のセクションをご覧ください。

  • intervals パラメータでは、時間差を測定するために使用する 1 つ以上の間隔単位を指定します。可能な選択肢のリストについては、このページの間隔オプションのセクションを参照してください。

  • 期間の値は最も近い整数に丸められます。

  • datatype パラメータは省略可能です。ディメンショングループが日時に基づいていない場合は、代わりにエポック、タイムスタンプ、日付、または yyyymmdd 形式を指定できます。type: duration のディメンション グループの場合、datatype パラメータは sql_start パラメータと sql_end パラメータの両方に適用されるため、sql_startsql_end の両方が指定されたデータ型であることを確認してください。datatype パラメータの詳細については、このページのデータベース datatype を指定するをご覧ください。

ここには示されていませんが、フィールドレベル パラメータの多くは、ディメンショングループでも使用できます。

たとえば、enrollment_dategraduation_date の列がある場合は、期間ディメンション グループを作成して、生徒が学校で過ごした時間を週単位と年単位で計算できます。

dimension_group: enrolled {
  type: duration
  intervals: [week, year]
  sql_start: ${TABLE}.enrollment_date ;;
  sql_end: ${TABLE}.graduation_date ;;
}

Explore UI では、登録週数登録年数という個別のディメンションを持つ、登録期間という名前のディメンション グループが生成されます。

間隔オプション

intervals パラメータは、sql_start 時間と sql_end 時間の差を測定するために使用する間隔単位をディメンション グループに伝えます。intervals パラメータは、type: duration のディメンション グループでのみサポートされています。

intervals が含まれていない場合、ディメンショングループにはすべての可能な間隔が含まれます。

intervals パラメータのオプションは次のとおりです。

間隔 説明 出力例
day 時間差を日数で計算します。 9 days
hour 時間差を時間数で計算します。 171 hours
minute 時間差を分数で計算します。 10305 minutes
month 時間差を月数で計算します。 3 months
quarter 時間差を四半期数で計算します。 2 quarters
second 時間差を秒数で計算します。 606770 seconds
week 時間差を週数で計算します。 6 weeks
year 時間差を年数で計算します。 2 years

期間の開始と終了の定義

type: duration のディメンション グループでは、sql_start パラメータと sql_end パラメータで、時間差の計算に使用される開始情報と終了情報が提供されます。これらのフィールドには、タイムスタンプ、日時、日付、エポック、または yyyymmdd 形式のデータを含む有効な SQL 式を指定できます。sql_start フィールドと sql_end フィールドには、次のいずれかを指定できます。

  • 既存のディメンション グループ type: time から raw タイムフレームへの参照
  • type: date_raw のディメンションへの参照
  • タイムスタンプ(タイムスタンプのSQL列の参照など)を含むSQL式
  • データベースから時間を取り込むSQL式(対象のダイアレクトに適した式を使用)
  • ::datetime または ::date フィールド タイプ参照を使用する LookML フィールド参照

例として、日時情報を含む faa_event_date_raw という名前のディメンションがあるとします。

dimension: faa_event_date_raw {
  type: date_raw
  sql: ${TABLE}.event_date ;;
}

FAA イベントの日付から経過した時間を計算する type: duration のディメンショングループを作成できます。そのためには、faa_event_date_raw ディメンションを計算の開始時間として使用し、計算の終了時間には現在の時間のダイアレクトの SQL 式を使用できます。この例は、MySQLデータベース用です。

dimension_group: since_event {
  type: duration
  intervals: [hour, day]
  sql_start: ${faa_event_date_raw} ;;
  sql_end: CURRENT_TIMESTAMP();;
}

Explore UI では、イベントからの時間数イベントからの日数という個別のディメンションを持つ、イベントからの期間という名前のディメンション グループが生成されます。

別のLookMLフィールドからの間隔の参照

type: durationdimension_groupinterval 値を参照するには、interval 値の複数形を使用して ${interval_fieldname} という構文を使用します。たとえば、次の LookML の例では、average_days_since_event メジャーは ${days_since_event} を使用して since_event ディメンション グループの day 間隔を参照します。


dimension_group: since_event {
  type: duration
  intervals: [hour, day, week, month, quarter, year]
  sql_start: ${faa_event_date_raw} ;;
  sql_end: CURRENT_TIMESTAMP();;
}

measure: average_days_since_event {
  type: average
  sql: ${days_since_event} ;;
}

期間フィールドのあるLookMLフィールドタイプ参照の使用

カスタム期間フィールドを作成するには、type: duration のディメンション グループの sql_startsql_end パラメータで参照されるディメンションに ::date または ::datetime 参照タイプを指定します。SQL の組み込みと LookML オブジェクトへの参照のドキュメント ページで説明されている view_name.field_name::type 構文を使用すると、ディメンションへの参照を文字列にキャストせずに、フィールドの ::date バージョンまたは ::datetime バージョンを作成できます。

たとえば、次のように定義された timedateweekmonthraw の期間を持つ type: timecreated ディメンション グループがあるとします。


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

created_month ディメンションと created_time ディメンションを使用して、created_date フィールドの日付と、その日付が含まれる月の初日の間の期間を週、日、時間単位で計算する type: duration ディメンション グループを作成できます。


dimension_group: since_first_of_month {
  type: duration
  intervals: [week, day, hour]
  sql_start: ${created_month::datetime} ;;
  sql_end: ${created_time::datetime} ;;
}

Explore UI では、月初からの週数月初からの日数月初からの時間数という個別のディメンションを持つ、月初からの期間という名前のディメンション グループが作成されます。sql_start パラメータと sql_end パラメータで参照されるフィールドに ::datetime 参照型を指定すると、生成された SQL で created_month ディメンションと created_time ディメンションをタイムスタンプとして扱うことができます。

たとえば、ユーザーがフィールド選択ツールで [作成日] ディメンションと [月の初日からの日数] ディメンションを選択したとします。[作成日] で返された値の 1 つが 2019-03-10 の場合、[月の初めからの日数] で返される値は 9 日になります。

時間タイプのディメンション グループ

type: time は、dimension_grouptimeframes パラメータと組み合わせて、時間ベースのディメンションのセットを作成するために使用されます。例えば、単一のタイムスタンプ列に基づいて日付、週、月のディメンションを簡単に作成できます。

type: time のディメンショングループの形式は次のとおりです。

dimension_group: dimension_group_name {
  type: time
  timeframes: [timeframe, timeframe, …] # see following explanation for valid timeframes
  sql: SQL expression ;;  # often this is a single database column
  datatype: epoch| timestamp | datetime | date | yyyymmdd # defaults to datetime
  convert_tz: yes | no   # defaults to yes
}

type: time のディメンション グループの場合:

  • timeframes パラメータは省略可能ですが、省略されることはほとんどありません。このパラメーターでは、ディメンショングループによって生成される 1 つ以上のタイムフレームを指定します。timeframes が含まれていない場合、すべてのタイムフレーム オプションがディメンショングループに追加されます。可能な選択肢のリストについては、このページのタイムフレーム オプションのセクションを参照してください。

  • type: time ディメンショングループの sql パラメータには、タイムスタンプ、日時、日付、エポック、または yyyymmdd 形式のデータを含む有効な SQL 式を指定できます。

  • datatype パラメータは省略可能です。ディメンショングループが日時に基づいていない場合は、代わりにエポック、タイムスタンプ、日付、または yyyymmdd 形式を指定できます。詳細については、このページのデータベース datatype を指定するをご覧ください。

  • convert_tz パラメータは省略可能で、タイムゾーンの自動変換を防止できます。それについては、このページのタイムゾーンの変換と convert_tz のセクションにあるさらに詳細な説明を参照してください。

ここには示されていませんが、フィールドレベル パラメータの多くは、ディメンショングループでも使用できます。

たとえば、日時情報を含む created_at という名前の列があるとします。この日時に基づいて日、週、月のディメンションを作成します。次のように指定できます。

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

Explore UI では、作成日作成週作成月という名前の 3 つのディメンションが生成されます。ディメンション名を生成するために、dimension_group 名がタイムフレームとどのように組み合わされるかに注意してください。

タイムフレームオプション

timeframes パラメータは、type: time のディメンション グループでのみサポートされています。type: duration のディメンション グループの場合は、代わりに intervals パラメータを使用します。

timeframes パラメータは、ディメンション グループが生成するディメンションを指定します。次のオプションがあります。

特別な期間

期間 説明 出力例
raw データベース内の生の値(キャストもタイムゾーンの変換も行っていないもの)。raw は LookML 内でのみアクセス可能で、[Explore] ページには表示されません。フォーマットされたストリングを返す他のほとんどのタイムフレームとは異なり、raw タイムフレームはタイムスタンプを返します。主にフィールドで日付操作を実行するために使用されます。 2014-09-03 17:15:00 +0000
yesno yesno ディメンション。日時に値がある場合は「Yes」、ない場合は「No」を返します。他のタイムフレームとは異なり、別のフィールドから yesno タイムフレーム ディメンションを参照する場合は、参照にタイムフレームを含めないでください。たとえば、dimension_group: createdyesno 期間を参照するには、${created_yesno} ではなく ${created} という構文を使用します。 Yes

期間

期間 説明 出力例
time 元となるフィールドの日時(SQLダイアレクトによっては、値がデータベース内のデータと同じ精度で示される場合と秒までしか示されない場合があります) 2014-09-03 17:15:00
time_of_day 時間帯 17:15
hour 直近の時間まで切り捨てた日時 2014-09-03 17
hour_of_day 基礎となるフィールドの時間を表す整数 17
hourX 各日を指定した時間数で分割します。 hourX の使用をご覧ください。
minute 直近の分まで切り捨てた日時 2014-09-03 17:15
minuteX 各時間を指定した分数で分割します。 minuteX の使用をご覧ください。
second 直近の秒まで切り捨てた日時 2014-09-03 17:15:00
millisecond 直近のミリ秒まで切り捨てた日時(ダイアレクトのサポートについては、このページのダイアレクトにおけるミリ秒およびマイクロ秒のサポートをご覧ください)。 2014-09-03 17:15:00.000
millisecondX 各秒を指定のミリ秒数の間隔で分割します(ダイアレクトのサポートについては、このページのダイアレクトにおけるミリ秒およびマイクロ秒のサポートをご覧ください)。 millisecondX の使用をご覧ください。
microsecond 直近のマイクロ秒まで切り捨てた日時(ダイアレクトのサポートについては、このページのダイアレクトにおけるミリ秒およびマイクロ秒のサポートをご覧ください)。 2014-09-03 17:15:00.000000

期間

期間 説明 出力例
date 元のフィールドの日付 2017-09-03

週の期間

期間 説明 出力例
week 元の日時の、月曜日から始まる週の日付 2017-09-01
day_of_week 曜日のみ Wednesday
day_of_week_index 曜日インデックス(0 = 月曜日、6 = 日曜日) 2

月単位の期間

期間 説明 出力例
month 元の日時の年と月 2014-09
month_num 元の日時の月を表す整数 9
fiscal_month_num 元の日時の会計月を表す整数 6
month_name 月の名前 September
day_of_month 3

fiscal_month_num 期間を使用するには、モデルで fiscal_month_offset パラメータを設定する必要があります。

四半期の期間

期間 説明 出力例
quarter 元の日時の年と四半期 2017-Q3
fiscal_quarter 元の日時の会計年度と四半期 2017-Q3
quarter_of_year 先頭に「Q」が付いた、年の四半期 Q3
fiscal_quarter_of_year 先頭に「Q」が付いた、年の会計四半期 Q3

fiscal_quarterfiscal_quarter_of_year の期間を使用するには、モデルで fiscal_month_offset パラメータを設定する必要があります。

年単位の期間

期間 説明 出力例
year 元の日時の年を表す整数 2017
fiscal_year 元の日時の会計年度を表す整数 FY2017
day_of_year 通日 143
week_of_year 年の週番号 17

fiscal_year の期間を使用するには、モデルで fiscal_month_offset パラメータを設定する必要があります。

hourX の使用

hourX では、X は 2、3、4、6、8、12 に置き換えられます。

これにより、各日が指定した時間数で分割されます。たとえば、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

たとえば、time2014-09-01 08:03:17 の行の hour62014-09-01 06:00:00 になります。

minuteX の使用

minuteX では、X は 2、3、4、5、6、10、12、15、20、30 に置き換えられます。

これにより、各時間が指定した分数で分割されます。たとえば、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

たとえば、time2014-09-01 01:17:35 の行の minute152014-09-01 01:15:00 になります。

millisecondX の使用

millisecondX では、X は 2、4、5、8、10、20、25、40、50、100、125、200、250、500 に置き換えられます。

これにより、各秒が指定したミリ秒数で分割されます。例えば、millisecond250 では、各秒が次のように 250 ミリ秒のセグメントに分割されます。

  • 2014-09-01 01:00:00.000
  • 2014-09-01 01:00:00.250
  • 2014-09-01 01:00:00.500
  • 2014-09-01 01:00:00.750

たとえば、time2014-09-01 01:00:00.333 の行の millisecond2502014-09-01 01:00:00.250 になります。

タイムゾーンの変換と convert_tz

一般的に、時間の計算(差、期間など)を正しく行うには、対象となるすべての時間値を同じタイムゾーンに変換する必要があります。したがって、LookMLを記述する際には、タイムゾーンに留意することが重要です。

Looker には、時間ベースのデータを異なるタイムゾーン間で変換するためのさまざまなタイムゾーン設定が用意されています。Lookerでは、デフォルトでタイムゾーン変換が行われます。convert_tz パラメータは、type: time のディメンション グループでサポートされています。特定のディメンションまたはディメンション グループで 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 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 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

データベース datatype の指定

datatype パラメータを使用すると、ディメンショングループに提供するデータベース テーブルの時間データのタイプを指定できるため、クエリのパフォーマンスを向上させることができます。

type: time のディメンション グループの場合、datatype パラメータはディメンション グループの sql パラメータに適用されます。

type: duration のディメンション グループの場合、datatype パラメータは sql_start パラメータと sql_end パラメータの両方に適用されるため、sql_startsql_end の両方が指定されたデータ型であることを確認してください。

datatype パラメータは次の値を受け入れます。

  • epoch: SQL エポック フィールド(つまり、Unix エポックからの秒数を表す整数)。
  • date: SQL 日付フィールド(つまり、時刻情報を含まないフィールド)。
  • datetime: SQL 日時フィールド。
  • timestamp: SQL タイムスタンプ フィールド。
  • yyyymmdd: YYYYMMDD 形式の日付を表す整数を含む SQL フィールド。

datatype のデフォルト値は timestamp です。

日時情報を含む created_at という名前の列があるとします。この日時に基づいて日、週、月のディメンションを作成します。次のように指定できます。

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

-

Explore UI では、作成日作成週作成月という名前の 3 つのディメンションが生成されます。ディメンション名を生成するために、dimension_group 名がタイムフレームとどのように組み合わされるかに注意してください。

注意点

ディメンショングループは個別のディメンションによって参照される必要があります。

ディメンショングループは、1 つのディメンションではなくディメンションのグループを表すため、LookML で直接参照することはできません。代わりに、ディメンショングループによって作成されるディメンションを参照する必要があります。

例えば、次のディメンショングループについて考えます。

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

別の LookML フィールドでこれらのディメンションのいずれかを参照するには、${created_date}${created_week}、または ${created_month} の参照を使用します。${created} のみを使用しようとすると、参照しようとしているタイムフレームが Looker に認識されず、エラーが発生します。

同じ理由で、複数の timeframe を指定する場合は、ディメンション グループで primary_key パラメータを使用しないでください。

チャットチームに関するヒント: 複数の timeframe を含む dimension_groupprimary_key を使用した場合に発生する検証エラーについてよくお問い合わせいただきます。詳しくは、Looker の期間とディメンション グループ に関するコミュニティ投稿をご覧ください。

タイムゾーン情報を含むタイムスタンプデータ

一部のデータベース ダイアレクトには、タイムゾーン情報を含むタイムスタンプ オプションがあります。これにより、タイムゾーンが複数ある単一フィールドにタイムスタンプデータを保管できます。あるデータ行は UTC で保存され、別の行は東部時間で保存されます。たとえば、Snowflake ダイアレクトのタイムスタンプ オプションについては、Snowflake TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ タイムスタンプのドキュメントをご覧ください。

この場合、Looker でタイムゾーン変換を実行するとエラーが発生することがあります。これを回避するには、ディメンションの sql パラメータで、タイムスタンプ データを明示的にタイムゾーン変換が行われないタイムスタンプ型に変換します。たとえば、Snowflake 言語では、TO_TIMESTAMP 関数を使用してタイムスタンプ データをキャストできます。

個別の時間または期間ディメンションを作成可能

すべての期間または期間を 1 つの dimension_group で生成するのではなく、含める期間または期間ごとに 1 つのディメンションを作成できます。一般的に、Looker のタイムフレームの命名規則を変更する場合、またはデータベースに計算済みの時間列が存在する場合を除き、個別のディメンションの作成を避けることができます。詳細については、ディメンション、フィルタ、パラメータのタイプに関するドキュメント ページをご覧ください。

週の最初の曜日を変更可能

デフォルトでは、Looker の週は月曜日に始まります。これは、モデルレベルで week_start_day パラメータを使用して変更できます。

week_start_dayweek_of_year 期間では機能しません。この期間は ISO 標準に基づいており、月曜日を週の始まりとして使用しているためです。

カスタムフィルタとカスタムフィールドで一部のタイムフレームがサポートされない

期間 day_of_weekfiscal_quarter_of_yearmillisecondmillisecondXmicrosecondmonth_namequarter_of_yeartime_of_day は、カスタム フィルタまたはカスタム フィールドではサポートされていません。

月、四半期、年の間隔では完全な期間のみがカウントされる

duration ディメンショングループ内の month 間隔では、終了日が開始日以降の場合にのみ、1 か月が経過したと見なされます。次に例を示します。

  • 同じ年の9月26日と10月25日の月数の差は0です。
  • 同じ年の9月26日と10月26日の月数の差は1です。

quarter 間隔と year 間隔も同じロジックに従います。