AlteryxのFormula式における日時操作いろいろ
こんにちは、小澤です。
みなさん、AlteryxのFormulaツールやFilterツールは使ってますか? これらは、多くのツールが存在するAlteryxの中でも比較的利用頻度の高いツールだと思われます。
これらのツールではFormula式を使って処理内容を記述します。 Formula式はワークフローの作成方法と同様、同じことを実現するにしても複数の書き方が考えられます。
今回は、その中から日時に対する操作を行う関数について書いていきます。
どんな関数を紹介するの?
今回は、Conversionにある関数たちを紹介していきます。
なんと、この画像中にあるので全部ではないです。 全部で以下のような関数があります。
- DateTimeAdd
- DateTimeDay
- DateTimeDiff
- DateTimeFirstOfMonth
- DateTimeFormat
- DateTimeHour
- DateTimeLastOfMonth
- DateTimeMinutes
- DateTimeMonth
- DateTimeNow
- DateTimeParse
- DateTimeSeconds
- DateTimeStart
- DateTimeToLocal
- DateTimeToUTC
- DateTimeToday
- DateTimeTrim
- DateTimeYear
- ToDate
- ToDateTime
数が多いですね。 似通ったものもあるので、それらはまとめて見ていくことにします。
関数紹介の前に
最初にさらっと確認しておくことがあります。
日時を扱うための型
Alteryxでの、日付や時間の扱いについて確認しましょう。 Alteryxでこれらを扱うためのものとして3つの型があります。
- Date : 日付を扱う
- Time : 時間を扱う
- DateTime : 日付と時間の両方を扱う
DateTimeカテゴリにある関数はこれらの型対して処理を行うものですが、 型によって使えたり使えなかったりする場合もあります。
文字列での表現
日時を扱う際にそれを文字列で表現するといったことがあります。 たとえば、文字列として"2018/08/20"のようなデータがあった際にこれをDate型に変換しないと日時を扱うための関数が利用できません。 今回紹介する関数の中には、これらの相互変換を行う関数もあります。
また、文字列して表示したり出力したりする際にどのような表記を行うかという問題もあります。 2018/08/20なのか、2018年8月20日なのかといった問題です。 Alteryxでは、日時を扱う型をそのまま出力した場合は"YYYY-MM-DD hh:mm:ss"の形式になります(Date型は前半、Time型は後半のみ)。 "日時として計算を行う"と"どのように表示するか"は分けて考える必要があります。
そのため、計算を行う際はDate型などに変換して処理を行い、出力の際に文字列に変換するといった操作が必要になります。
関数紹介
では、どんどん紹介していきます。
DateTimeAdd関数
最初はDateTimeAdd関数です。 これは、特定の値を足すような関数となります。 これによってn日後やn時間後といった値を算出できます。
以下のようなデータに対して使ってみます。
一番左側のDate列に対して3日後を求めてみましょう。
DateTimeAdd([Date],3,"Days")
結果は以下のようになります。
引数は3つあります。それぞれ
- 1つ目 : 対象となる列
- 2つ目 : 足す値
- 3つ目 : 単位
となります。 ここでは、単位として"Days"を指定しているので日にち単位となっています。 これを"Hours"にすると時間、"Years"にすると年などの指定が可能です。
2つ目の引数にマイナスの値を指定することで、n日前のような過去に遡る計算も可能です。
DateTimeAdd関数はDate型とDateTime型に対して利用可能ですが、Time型に対しては利用できません。
DateTimeDiff関数
DateTimeDiff関数は日時同士の差分を求める関数です。 先ほど、DateTimeAddで求めた3日後のデータとの差を求めて見ましょう。
DateTimeDiff([add], [Date], "Hours")
単位を"Hours"としているので24*3で72という結果が返ってきます。
DateTimeYear/Month/Day/Hour/Minutes/Seconds関数
これらは日時データから特定の部分のみを取り出す関数です。
以下2つを求めてみます。
DateTimeDay([DateTime])
DateTimeSeconds([DateTime])
結果は以下のようになります。
DateTimeToday/Now/Start/FirstOfMonth/LastOfMonth関数
これらの関数はワークフローを実行したタイミングに依存した結果を返します。
- DateTimeToday : 関数が実行されたタイミングの日付
- DateTimeNow : 関数が実行されたタイミングの日時
- DateTimeStart : ワークフローの実行が開始されたタイミングの日時
- DateTimeFirstOfMonth : 実行されたタイミングの月の開始日時
- DateTimeLastOfMonth : 実行されたタイミングの月の最終日時
となります。 ワークフロー実行後、2分程度ウエイトする処理を挟んだ後の実行結果を見てみましょう。
なお、ウエイトする処理はRun Commandツールを使って以下のように実現しています。
DateTimeFormat/Parse/ToDate/ToDateTime関数
これらは日時型と文字列型を相互変換する関数です。
DateTimeFormatを以下のような使い方で実行してみます。
DateTimeFormat([Date],"%Y年%m月%d日")
結果は以下のようになります。
年月日形式で文字列に変換されました。 2つ目の引数で指定している"%Y"などの記述は、そこに特定の値を埋め込むような表記方法になります。 今回使っているのは以下の3つです。
- %Y : 元のデータの年の部分
- %m : 元のデータの月の部分
- %d : 元のデータの日の部分
指定できる項目はいっぱいあるので、Functionsのドキュメント > DateTime > Specifiersを参照してください。 日常でよく使うのは、以下のものになるかと思われます。
項目 | 内容 |
---|---|
%Y | 西暦4桁の年 |
%y | 西暦下2桁の年 |
%m | 月 |
%d | 日 |
%H | 24時間表記の時 |
%M | 分 |
%S | 秒 |
DateTimeParseはDateTimeFormatの逆の処理を行う関数です。 こちらは文字列のデータがどのようなフォーマットになっているかを指定して日時型に変換します。
DateTimeParse([Format],"%Y年%m月%d日")
ToDateおよび、ToDateTime関数は、DateTimeParseの簡易版のような関数です。 文字列で記載された日時が"YYYY-MM-DD"または"YYYY-MM-DD hh:mm:ss"の形式になっている場合、 この関数を利用すればフォーマットを指定せずにそれぞれDate型とDateTime型への変換が可能です。
DateTimeTrim関数
DateTimeTrim関数は日付を特定の単位で丸めるの際に利用します。
例えば、以下のような指定で関数を使ってみます。
DateTimeTrim([DateTime],"year")
年よりも細かい単位は切り捨てられて、その年の開始日になっています。 切り捨てる単位をmonthにすると、以下のように月の情報までは保持した状態になります。
DateTimeTrim([DateTime],"month")
月に関しては、切り捨ての他に"lastofmonth"を指定することで、"その月の最終日"までの切り上げも可能です。
DateTimeTrim([DateTime],"lastofmonth")
指定できる項目は以下のようになります。
- firstofmonth(monthと同じ結果)
- lastofmonth
- year
- month
- day
- hour
- minute
秒に関しては、指定しても何も切り捨てていない状態になるため指定できません。
DateTimeToLocal/UTC関数
この2つは時差に関する扱いをするための関数です。 ローカル時間については、ワークフローの処理を実行している環境に依存します。
DateTimeToLocalは、今のデータがUTC(協定世界時)になっているものとして、対象のタイムゾーンのローカル時間に変換されます。 日本でワークフローを実行すると、JST(日本標準時)は+9なので9時間進んだ値を返します。
DateTimeToLocal([DateTime])
DateTimeToUTCはその逆で、データがローカル時間になっているものとして、UTCでの時間を返します。 日本では9時間巻き戻った結果を得られます。
DateTimeToUTC([DateTime])
おわりに
今回は、AlteryxのFormula式における日時に対する操作を行うDateTimeの関数について書きました。
日時の扱いはいろいろ複雑な側面もあるため、Alteryxを利用する際は可能な限り文字列から自力で計算しようとせず一度型を変えてからこれらの関数を使った方がいいでしょう。
Alteryxの導入なら、クラスメソッドにおまかせください
日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。