使用状況
dimension_group: field_name { ... }
}
階層
dimension_group |
許可
Looker 識別子(ディメンション グループによって作成された各ディメンションの名前の最初の部分として使用されます)特別なルール
|
定義
dimension_group
パラメータは、時間ベースまたは期間ベースのディメンションのセットを一度に作成するために使用されます。ディメンション グループを定義すると、期間や期間ごとに個別のディメンション セットが作成されます。たとえば、タイムスタンプ列に基づいて type: time
のディメンション グループを指定すると、対応するディメンションが作成され、時間、日付、週、時、四半期、年のデータがそれぞれ表現されます。
ディメンション グループのフォームと関数は、ディメンション グループの type
の値によって異なります。
期間タイプ
type: duration
は、dimension_group
とともに、間隔に基づく持続時間のディメンションのセットを計算するために使用されます。
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, …] # valid intervals described below
}
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 で「Durationd Registered」というディメンション グループが生成され、「Weeks Registered」と「Years Registered」という個々のディメンションがあります。
間隔オプション
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 ;;
}
ディメンションのグループ type: duration
を作成すると、FAA イベント日からの経過時間を計算できます。そのためには、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
を使用して type: duration
のディメンション グループを作成し、created_date
フィールドの日付からその日付が始まった日までの期間を、週、日、時間で計算することができます。
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
参照タイプを指定すると、created_month
ディメンションと created_time
ディメンションが生成された SQL のタイムスタンプとして扱われるようになります。
たとえば、フィールド選択ツールで [作成日] と [月の初日] のディメンションを選択したとします。[Created Date] に返される値のいずれかが 2019-03-10 の場合、Days after Month で返される値は 9 days になります。
時間タイプ
type: time
は、dimension_group
パラメータおよび timeframes
パラメータと組み合わせて使用し、時間ベースのディメンションのセットを作成します。例えば、単一のタイムスタンプ列に基づいて日付、週、月のディメンションを簡単に作成できます。
type: time
のディメンション グループの形式は、次のとおりです。
dimension_group: dimension_group_name {
type: time
timeframes: [timeframe, timeframe, …] # valid timeframes described below
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 で Created Date、Created Week、Created Month という 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 |
指定した時間間隔で毎日をスプリットします。詳しくは、以下をご覧ください。 | 以下をご覧ください。 |
minute |
直近の分まで切り捨てた日時 | 2014-09-03 17:15 |
minuteX |
指定した時間(分単位)に分割します。詳しくは、以下をご覧ください。 | 以下をご覧ください。 |
second |
直近の秒まで切り捨てた日時 | 2014-09-03 17:15:00 |
millisecond |
日時はミリ秒単位で切り捨てられます(言語のサポートについては、このページのミリ秒とマイクロ秒のサポートをご覧ください)。 | 2014-09-03 17:15:00.000 |
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
では、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
たとえば、time
が 2014-09-01 08:03:17
である行の hour6
は 2014-09-01 06:00:00
です。
minuteX
で、X
が 2、3、4、5、6、10、12、15、20、または 30 に置き換えられます。
指定した時間(分単位)に分割されます。たとえば、minute15
は 1 時間ごとに 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
である行の minute15
は 2014-09-01 01:15:00
です。
millisecondX
では、X
が 2、4、5、8、10、20、25、40、50、100、125、200、250、500 に置き換えられます。
これは、指定されたミリ秒単位の間隔で 1 秒ずつ分割されます。たとえば、millisecond250
は 1 秒ごとに 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
たとえば、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
のディメンション グループでサポートされています。特定のディメンションやディメンション グループに対してタイムゾーン変換を実行しない場合は、convert_tz
パラメータのドキュメント ページに記載されている convert_tz
パラメータを使用します。
ダイアレクトにおけるミリ秒およびマイクロ秒のサポート
Looker ではマイクロ秒までの期間精度がサポートされていますが、一部のデータベースでは秒の精度しかサポートしていません。このようなデータベースに、対応するタイムフレームよりも精度の高いタイムフレームが入力された場合、時間は秒単位に切り上げられます。
Looker の最新リリースでは、次の言語がミリ秒をサポートしています。
Looker の最新リリースでは、次の言語がマイクロ秒をサポートしています。
データベース 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 で Created Date、Created Week、Created Month という 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
を使用すると発生する検証エラーをよくよく聞かれます。詳しくは、こちらのコミュニティのトピックをご覧ください。
タイムゾーン情報を含むタイムスタンプデータ
一部のデータベース言語には、タイムゾーン情報を含むタイムスタンプ オプションがあります。これにより、複数のタイムゾーンがある 1 つのフィールドにタイムスタンプ データを保存できます。データのある行を UTC に格納し、別の行を東部時間に格納することもできます。たとえば、Snowflake 言語のタイムスタンプ オプションについては、Snowflake TIMESTAMP_LTZ, TIMESTAMP_NTZ, TIMESTAMP_TZ
タイムスタンプのドキュメントをご覧ください。
この場合、Looker でタイムゾーン変換が行われると、エラーが発生する可能性があります。これを回避するには、ディメンションの sql
パラメータで、タイムゾーン変換を行わないタイムスタンプ型にタイムスタンプ データを明示的にキャストします。たとえば、Snowflake 言語では、TO_TIMESTAMP
関数を使用してタイムスタンプ データをキャストできます。
個別の時間または期間ディメンションを作成可能
単一の期間にすべてのディメンションを生成するのではなく、追加する期間や期間ごとに 1 つのディメンションを作成することもできます。dimension_group
Looker の期間の命名規則を変更する場合や、データベースで事前に計算された時間列がある場合を除き、通常は個別のディメンションを作成する必要はありません。詳しくは、ディメンション、フィルタ、パラメータの種類に関するドキュメント ページをご覧ください。
週の最初の曜日を変更可能
デフォルトでは、Looker の週は月曜日から始まります。これを変更するには、モデルレベルで week_start_day
パラメータを使用します。
week_of_year
の時間枠は月曜日から始まる ISO 基準に基づいているため、week_start_day
が機能しないことに注意してください。
カスタムフィルタとカスタムフィールドで一部のタイムフレームがサポートされない
現在、期間 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
の間隔は同じロジックに従います。