dimension_group

使用状況

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

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

定義

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_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 で「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: 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_start パラメータと sql_end パラメータで参照されるディメンションに対して ::date または ::datetime 参照タイプを指定します。SQL の組み込みと LookML オブジェクトの参照で説明されている view_name.field_name::type 構文を使用すると、これらのディメンションへの参照を文字列にキャストせずに、::date バージョンまたは ::datetime バージョンを作成できます。

たとえば、timedateweekmonthraw の期間を type: time として定義する created ディメンション グループがあるとします。


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

ディメンション created_monthcreated_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 DateCreated WeekCreated Month という 3 つのディメンションが生成されます。dimension_group の名前に期間を組み合わせて、ディメンション名を生成します。

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

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

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

特別期間

期間 説明 出力例
raw データベースの未加工の値(キャストやタイムゾーン変換なし)。raw には LookML 内でのみアクセスでき、Explore ページには表示されませんraw の時間枠はタイムスタンプを返します。他のほとんどの時刻は書式設定された文字列を返します。主にフィールドで日付操作を実行するために使用されます。 2014-09-03
17:15:00 +0000
yesno 日時に値がある場合は「Yes」、それ以外の場合は「No」を返す yesno ディメンション。他の期間とは異なり、別のフィールドから 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 指定した時間間隔で毎日をスプリットします。詳しくは、以下をご覧ください。 以下をご覧ください。
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_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 は 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

たとえば、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 に置き換えられます。

これは、指定されたミリ秒単位の間隔で 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

たとえば、time2014-09-01 01:00:00.333 である行の millisecond2502014-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_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 で Created DateCreated WeekCreated 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_groupprimary_key を使用すると発生する検証エラーをよくよく聞かれます。詳しくは、こちらのコミュニティのトピックをご覧ください。

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

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

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

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

単一の期間にすべてのディメンションを生成するのではなく、追加する期間や期間ごとに 1 つのディメンションを作成することもできます。dimension_groupLooker の期間の命名規則を変更する場合や、データベースで事前に計算された時間列がある場合を除き、通常は個別のディメンションを作成する必要はありません。詳しくは、ディメンション、フィルタ、パラメータの種類に関するドキュメント ページをご覧ください。

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

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

week_of_year の時間枠は月曜日から始まる ISO 基準に基づいているため、week_start_day が機能しないことに注意してください。

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

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

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

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

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

quarteryear の間隔は同じロジックに従います。