LoginSignup
8
6

More than 5 years have passed since last update.

Google Data StudioでUnix epochを扱う

Last updated at Posted at 2017-11-06

Google Data Studioは様々なデータソース(GoogleスプレッドシートやBigQueryなど)を元にグラフィカルなレポートを作れるようなサービスです。たとえば下記のようなレポートが簡単に作成できます。データソースに更新があれば自動的にレポートも書き換わります。

datastudio-adwards.png

Data Studioには計算フィールドという機能があり、既存のカラム値を元に新たなカラムをData Studio上で作り出すことができます。計算フィールドではData Studioの組み込み関数を使うこともできるのですが、この中にTODATE()という関数があります。

構文
TODATE(field_expression, input_date_format, output_date_format)

入力形式
input_date_format は、field_expression が正しい日付として設定されている場合、省略できます。

TODATE では、次の入力形式の文字列を使用できます。

'BASIC' - 使用可能な形式: YYYY/MM/DD-HH:MM:SS
'DEFAULT_DASH' - 使用可能な形式: YYYY-MM-DD [HH:MM:SS[.uuuuuu]]
'DEFAULT_SLASH' - 使用可能な形式: rmat YYYY/MM/DD [HH:MM:SS[.uuuuuu]]
'DEFAULT_DECIMAL' - 使用可能な形式: YYYYMMDD [HH:MM:SS[.uuuuuu]]
'RFC_1123' - 表示例: Sat, 24 May 2008 20:09:47 GMT
'RFC_3339' - 表示例: 2008-05-24T20:09:47Z
'SECONDS' - エポックからの秒数
'MILLIS' - エポックからのミリ秒数
'MICROS' - エポックからのマイクロ秒数
'NANOS' - エポックからのナノ秒数
'JULIAN_DATE' - エポックからの日数
'DECIMAL_DATE' - 'DEFAULT_DECIMAL' と同じ
文字列として有効な strptime 形式

https://support.google.com/datastudio/answer/7037300?hl=ja

私は時差の取り扱いのためにカラムの値に7時間をプラスした日時を作り出したかったのですが、時間の加減算を行う関数は提供されておらず、唯一利用できそうだったのが一度Unix epochとして整数化した上で再度日付に変換するという方法でした。

ところが、TODATE()の第二引数に"SECONDS"を指定しても「数式が無効です」というエラーが返ってきてうまく動きません。ネット上で検索してみても、同様の悩みを持っている人が何人か見つかりました(「Solved: Can Data Studio Date Dimension use epoch (in seconds) from BigQuery」)。

解決方法:第二引数に%sを指定する

最終的に私は次のような指定をして求める値を得ることができました。

TODATE(CAST(unixtime AS TEXT), '%s', '%Y%m%d')

ここで第二引数に指定している%sはCのライブラリ関数strptimeのフォーマットです。どうやら%sはPOSIX標準ではなくglibc方言のようですが、少なくとも私が試した限りでは期待通り動きました。

第一引数の中のunixtimeは数値型のカラム名だと思ってください。これをわざわざテキストにキャストすることで期待通りに動作します。このキャストが無いとエラーのままでした。

ちなみに私が実験したときのデータソースはBigQueryでした。

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6