[Alteryx]日付時刻に整数が混ざっていてもフォーマットを統一したい!

2018.11.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、にいのです。

Alteryxで日付や時刻の形式を変更したい時に便利なのがDateTime Toolですが、連携されるデータがバラバラな形式の場合に変換が上手くいかないケースがあります。

今回はいろんな形の日付や時刻を統一された形式に整えてみましょう。使用するツールはFormula Toolです。

インプットデータ

インプットデータとして下記のデータを準備しました。

ご覧の通り形式がバラバラです。例として、これをhh:mm:ssの形式に統一します。

DateTimeFormat関数で日付時刻を変換する

まずはDateTimeFormat関数で変換してみましょう。DateTimeFormat関数とは、パラメータで指定した形式文字列の形に変換してくれます。

DateTimeFormat([項目名],"形式文字列")

形式文字列として使える種類については、Alteryxのヘルプページに記載がありますのでご参照ください。

今回はhh:mm:ssの形式にするため、下記の通り記述しました。

DateTimeFormat([日付時刻],"%H:%M:%S")

早速Formula Toolに関数を入れて動かしてみましょう。

結果は以下の通り、日付・時間の値を持つケースはうまく変換できました。(日付のみ(例:2018-11-07)の場合は00:00:00と見なされます。)

しかし、整数の値が変換できていません。

regex_replaceとPadrightで整数を変換する

Alteryxにデータを処理させる前の時点でおかしな値は弾いてしまいたいところですが、なかなかそうもいかないケースがあるのではないでしょうか。今回の例でも日付や時刻に混ざってただの整数があります。DateTimeFormatでは処理できないですが、この整数もなんとか前項と同じhh:mm:ssのフォーマットにしてみましょう。

整数を変換するために使用したのはregex_replacePadrightです。Padrightで値を6桁に変換し、置換の機能を持つregex_replaceで6桁の数字の間に:を入れる作戦です。 それぞれ関数の使い方は以下の通りです。

regex_Replace(String, pattern, replace)

引数 説明
String 対象の値
pattern 正規表現のパターン
replace 置き換えたい文字列

Padright(String, len, char)

引数 説明
String 対象の値
len 長さ
char 長さに満たない部分を埋める文字

今回のケースで記述したのは以下の文です。

regex_replace(Padright([日付時刻],6,'0'),"(\d\d)(\d\d)(\d\d)","$1:$2:$3")

この文を整数の場合にのみ適用し、日付時刻のフォーマットを持つ場合はDateTimeFormat関数で処理させるため、最終的には以下の通りに記述しました。

IF IsInteger([日付時刻])
THEN regex_replace(Padright([日付時刻],6,'0'),"(\d\d)(\d\d)(\d\d)","$1:$2:$3")
ELSE DateTimeFormat([日付時刻],'%H:%M:%S')
ENDIF

実行すると、整数もhh:mm:ssの形に変換されました。

おわりに

今回はバラバラな形式のデータを統一する方法をご紹介しました。フォーマットの統一でお悩みの際、ご参考になれば幸いです。

Alteryxの導入なら、クラスメソッドにおまかせください

日本初のAlteryxビジネスパートナーであるクラスメソッドが、Alteryxの導入から活用方法までサポートします。14日間の無料トライアルも実施中ですので、お気軽にご相談ください。

alteryx_960x400