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)で集計されてしまい、意図しない結果となります。
この問題に対処する方法はなにかありますでしょうか?
ご連絡ありがとうございます。
上記の件、ご利用になられているデータベースは、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が解消され、回避できることが確認できました!ご回答ありがとうございました!