WeeklyAlteryxTips#81 好きな時間でDateTimeTrimする方法

Alteryx

時系列データを取り扱う際、あまりにもデータが多い場合や、複数のデータソースの時間間隔が異なる場合に合わせたい、などといったケースでは、データを分刻みにするとか時間刻みにするなど、時間を操作する必要があります。これをAlteryxで行う場合、DateTimeTrim関数を使います。

DateTimeTrimとは?

このような場合に、AlteryxではDateTimeTrim関数が非常に便利で、指定した単位でそれ以下の時間を切り捨てることができます。例えば、一ヶ月の売上データがあった場合に、月単位で集計したいといった場合は、DateTimeTrim([DateTime],”Month”)などとすることで、日付列を月初の日付にすることができます。

ここで、DateTimeTrim関数のオプションを見てみましょう。

DateTimeTrim(dt,t)
  • dt:日付データ。値を直接指定することも可能ですし、Date型、DateTime型のフィールドを指定することも可能です。
  • t:トリムする単位を指定します。単位は以下のように指定します。
    • Year:1月1日AM0時0分0秒にします
    • Month:当該月の1日のAM0時0分0秒にします
    • Day:該当日のAM0時0分0秒にします
    • Hour:該当の時間の0分0秒にします
    • Minute:該当の分の0秒にします
    • seconds:該当の秒にします(秒より小さい単位を使っているときに利用可能です)
    • milliseconds:該当のミリ秒にします(秒より小さい単位を使っているときに利用可能です)
    • Firstofmonth:当該月の1日のAM0時0分0秒にします。Monthオプションと同じ。
    • Lastofmonth:当該月の最終日の23時59分59秒にします。

しかしこれ、基本的に中途半端な時間にすることはできません。例えば、5分ごとのデータにすることはできません。今回は、指定した時間間隔になるようにしてみたいと思います。

好きな時間でDateTimeTrimする

まず、5分ごとにデータにしてみたいと思います。

基本的な考え方としては、分の部分を抜き出し、5で割ったときの余りを計算し、その余りを元の時間から引き算。その後小数点部分を消すためにDateTimeTrimを分指定で行う、ということになります。フォーミュラ1つで再現すると、以下のようになります。なお、インプットする時間フィールドの名前は「MyDateTime」です。

DateTimeTrim(DateTimeAdd([MyDateTime],-MOD(DateTimeMinutes([MyDateTime]),5),"minutes"),"minutes")

もう少し分割して考えると、以下のようになります。

この結果は、以下のようになります。

MODで計算した時間が「minutes」フィールドに出力されています。これをMyDateTimeから引き算すれば、0分~4分はすべて0分のデータになります。ちなみに、秒が無いデータであれば、最後のDateTimeTrimは不要です。

これを応用すれば、2時間単位や、10秒単位などももちろん簡単にできます。

気をつけないといけないポイントとして、指定する間隔について、分の場合は60分を割り切れる必要があります。例えば、25分単位などにすると、0分、25分、50分という感じになりますが、上の式だとまた0分、25分、50分となります。25分間隔にしたいということであれば、50分の次は75分なので、15分(一番はじめの時間からすれば、1時間15分ということですね)が正解です。この場合は次のように考えます。

指定する間隔を常に一定にしたい場合

この場合は、基準となる開始ポイントを決めてそこからの時間がどうなのか、ということになりますが、基準時間を決める分、少し複雑なワークフローになるかもしれません。

今回は、当日のAM0時0分0秒を常に基準とします。この場合、フォーミュラツールの数式は以下のようになります。

一番上の部分しか変更していませんが、基準となる日時からDateTimeDiffを行っています。ここで基準となる時間は「MyDateTime」を日でDateTimeTrimした時間にしています。これにより、以下のようなデータが得られます。確かに25分ごとになっています。

いずれにしてもあまりトリッキーな間隔にするとわかりにくくなるため、例えば1時間を割り切れる間隔や1日を割り切れる間隔にするのが良いかと思います(変な時間間隔にすると、日にちごとで見ようとしたときなどに、日ごとにデータ数が変わったりするとややこしくなります)。

なお、上の数式はフォーミュラ式一つの場合、以下のようになります。

DateTimeTrim(DateTimeAdd([MyDateTime],-MOD(DateTimeDiff([MyDateTime],DateTimeTrim([MyDateTime],"Day"),"minutes"),25),"minutes"),"minutes")

基準時間を自分で指定したい場合は、赤色の部分を特定の日付にしてください(例:’2025-01-01 00:00:00’ など)。

まとめ

  • 指定した時間間隔でDateTimeTrim的なことをする方法を紹介しました
  • なるべく1日、1時間などを割り切れる間隔でやることをおすすめします

サンプルワークフローダウンロード

次回

未定です。

コメント

タイトルとURLをコピーしました