用途
view: view_name {
dimension_group: field_name { ... }
}
|
階層
dimension_group |
許可
Looker ID(ディメンション グループによって作成される各ディメンションの名前の最初の部分として使用されます)
特別なルール
|
定義
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_startとsql_endの両方が指定されたデータ型であることを確認してください。datatypeパラメータの詳細については、このページのデータベースdatatypeを指定するをご覧ください。
ここには示されていませんが、フィールドレベル パラメータの多くは、ディメンショングループでも使用できます。
たとえば、enrollment_date と graduation_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: duration の dimension_group で interval 値を参照するには、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_start と sql_end パラメータで参照されるディメンションに ::date または ::datetime 参照タイプを指定します。SQL の組み込みと LookML オブジェクトへの参照のドキュメント ページで説明されている view_name.field_name::type 構文を使用すると、ディメンションへの参照を文字列にキャストせずに、フィールドの ::date バージョンまたは ::datetime バージョンを作成できます。
たとえば、次のように定義された time、date、week、month、raw の期間を持つ type: time の created ディメンション グループがあるとします。
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_group と timeframes パラメータと組み合わせて、時間ベースのディメンションのセットを作成するために使用されます。例えば、単一のタイムスタンプ列に基づいて日付、週、月のディメンションを簡単に作成できます。
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 パラメータは、ディメンション グループが生成するディメンションを指定します。次のオプションがあります。
特別な期間
期間
| 期間 | 説明 | 出力例 |
|---|---|---|
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_quarter と fiscal_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:002014-09-01 06:00:002014-09-01 12:00:002014-09-01 18:00:00
たとえば、time が 2014-09-01 08:03:17 の行の hour6 は 2014-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:002014-09-01 01:15:002014-09-01 01:30:002014-09-01 01:45:00
たとえば、time が 2014-09-01 01:17:35 の行の minute15 は 2014-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.0002014-09-01 01:00:00.2502014-09-01 01:00:00.5002014-09-01 01:00:00.750
たとえば、time が 2014-09-01 01:00:00.333 の行の millisecond250 は 2014-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_start と sql_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_groupでprimary_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_day は week_of_year 期間では機能しません。この期間は ISO 標準に基づいており、月曜日を週の始まりとして使用しているためです。
カスタムフィルタとカスタムフィールドで一部のタイムフレームがサポートされない
期間 day_of_week、fiscal_quarter_of_year、millisecond、millisecondX、microsecond、month_name、quarter_of_year、time_of_day は、カスタム フィルタまたはカスタム フィールドではサポートされていません。
月、四半期、年の間隔では完全な期間のみがカウントされる
duration ディメンショングループ内の month 間隔では、終了日が開始日以降の場合にのみ、1 か月が経過したと見なされます。次に例を示します。
- 同じ年の9月26日と10月25日の月数の差は0です。
- 同じ年の9月26日と10月26日の月数の差は1です。
quarter 間隔と year 間隔も同じロジックに従います。