WeeklyAlteryxTips#34 現在日時ツールとDateTimeNow()関数の挙動の違い

Alteryx

Alteryxで現在日時を取得しようとすると、思いつくのが現在日時ツール、もしくはフォーミュラツール内でDataTimeNow()関数も使うことができます。この2つには実は違いがあります。処理が高速に行われるようなワークフローの場合はあまりこの違いが気にならないかもしれませんが、今回はその違いについて解説していきます。

現在日時ツールとは?

現在日時ツールは、入出力カテゴリにあり、現在の日時を取得するツールです。中身は実はマクロです。設定は極めてシンプルで、言語を選び、出力フォーマットを選択すると1レコードだけ現在の日時を出力するツールです。

設定画面は以下の通り。

出力は以下のような感じです。

DateTimeNow()関数とは?

DateTimeNow関数は、フォーミュラツール内で使う関数です。現在の日時を出力するツールです。以下のようにフォーミュラツール内でセットします。

何が違うの?

DateTimeNow()関数と現在日時ツール、同じように見えますが一体何が違うのでしょうか?

例えば、出力ファイルに現在の日時を付与して出力することを考えてみたいと思います。通常、日時をファイル名に付与する場合は日時を含むフィールドを作成し、ファイル出力ツールにて「フィールドからファイル/テーブル名を取得する」オプションを使います。

このDateTimeNowフィールドを作るために、DateTimeNow()関数と現在日時ツールで比較してみましょう。ただ、データ量の多いワークフローを想定し、途中にスロットルツールを入れて重い処理をエミュレートしてみましょう。以下のようなワークフローになります。※スロットルツールはAMPエンジンオンだと動かないので要注意です

これを実行すると、以下のようなログを見ることができます。

想定と違い、DateTimeNow()関数を使っている方は、複数のファイルが出力されてしまっています。データの中身を見ると、以下のように各レコードで時間が異なっています。

現在日時ツールの場合は以下のような出力になります。

つまり、フォーミュラツールを各レコードが通過した時間がそのままDateTimeNow()関数で出力されているわけです。小さいワークフローではこの現象に気づきにくいのですが、データ量が多くなると、当然時間をまたぐ可能性が高くなるため、複数のファイルが生成されて「あれ?」となってしまうわけです。

まとめ

  • 現在日時ツールは1レコードのみ生成するのに対し、DateTimeNow()関数は、各レコードが通過した時点の時刻を生成するという違いがありました。
  • ファイル名として使いたいような場合はDateTimeNow()関数は使えないので、現在日時ツールを使用するようにしましょう。

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

次回

未定です。

コメント

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