Question

NDTのtimezone指定によるエラー

  • 12 May 2021
  • 3 replies
  • 99 views

Exploreで例えば以下のようなMeasureを定義しています。

measure: count{

type:count_distinct

sql: CASE WHEN a_date <= b_date THEN id ELSE NULL END

}

a_date,b_dateどちらも元データがtimestampでtype:time型のdimension_groupを定義しており、date型を取り出して使用しています。

このcountメジャーをtimezone:Asia/Tokyoに設定したNDTで使用すると以下のようにSQLが変換されます。

COUNT(DISTINCT CASE WHEN 
TIMESTAMP(FORMAT_TIMESTAMP('%F %H:%M:%E*S', FORMAT_TIMESTAMP('%Y-%m-%d', TIMESTAMP(FORMAT_TIMESTAMP('%F %H:%M:%E*S', a_date , 'Asia/Tokyo')))), 'Asia/Tokyo')
<= ( TIMESTAMP(FORMAT_TIMESTAMP('%F %H:%M:%E*S', FORMAT_TIMESTAMP('%Y-%m-%d', TIMESTAMP(FORMAT_TIMESTAMP('%F %H:%M:%E*S', b_date , 'Asia/Tokyo')))), 'Asia/Tokyo'))
THEN id END
) AS count

一度FORMAT_TIMESTAMPした指標に対して再度FORMAT_TIMESTAMPが動作し引数の型が合わないためエラーが発生してしまい、PDTの生成などに失敗してしまいます。(ExploreのRun自体はエラーが表示されていても実行できます。)

timezone:Asia/Tokyoを外せばFORMAT_TIMESTAMPは動作しないので問題ないですが、そうするとデータベースのタイムゾーン(UTC)で集計されてしまい、意図しない結果となります。

この問題に対処する方法はなにかありますでしょうか?

 


This topic has been closed for comments

3 replies

Userlevel 2

ご連絡ありがとうございます。

上記の件、ご利用になられているデータベースは、BigQueryでしょうか?
以下のように絞り込み条件の部分をdimensionとして定義していただくことで回避可能かと存じます。
一度、ご確認いただけますでしょうか?

 

dimension: flag {

  type: yesno

  hidden: yes

  sql: ${a_date} >= ${b_date} ;;

}

measure: count {

  type: count_distinct

  sql: ${id} ;;

  filter: [

    flag: “Yes”

  ]

}

はい、利用しているデータベースはBigQueryです。

絞り込み条件を別で定義するのですね、試して確認してみます。

早速試してみたところ2重になっていたFORMAT_TIMESTAMPが解消され、回避できることが確認できました!ご回答ありがとうございました!