Alteryxでファイル名に日付・時間を自動的につけて保存する方法を紹介します
今回はちょっとした小技です。
Alteryxで定期的にデータを出力する場合に、同じフォルダに過去の履歴をずっと残しながらファイルを保存したい、ということがあるかと思います。そうなると、ファイル名に日付・時間などを付加して保存したいとなるかと思います。
【イメージ】
Alteryxではデフォルトではそのような機能を持っていないので、少し工夫したWFを作成する必要があります。
- 手軽に日付を付加して保存
- 時間まで付加して保存
方法としては上2つを紹介したいと思います。
そもそも根本的にどうやるのか?
「データ出力(Output Data)」ツールのオプションの「フィールドからファイル/テーブル名を取得」の機能を使います。この機能を使うことで、出力時のファイル名をフィールドから得ることができるため、動的にファイル名を変更することが可能です。
例えば、ファイル名にフィールドの内容を付加する場合は「接尾辞を追加」を選びますが、その際にフィールドの内容が今日の日付であれば、それをファイル名に付加して出力することになります。
上記の画像で、「接尾辞を追加」を選択しておけば、出力ファイル名に「20190819」という文字列が入ってきます(「output_smaple_120190819.csv」のようになります。このような場合はファイル名と日付の間に「_」などが入るように工夫した方がわかりやすいと思います)
それでは、実際のワークフローを紹介していきます。
1.手軽に日付を付加して保存
「手軽に」と記載していますが、正しくは「マウスクリック操作のみで」と言った方が正解です。マウスのみで簡単にできる方法です。
概要
「現在日時(DateTimeNow)」ツールの出力結果を「フィールド付加(Field Append)」ツールで付加して、「データ出力(Output Data)」ツールにてファイル名の末尾などに日付を付加して出力します。
ワークフローサンプル
各種設定
設定①:現在日時ツール
設定項目は1つのみです(「出力フォーマット」)。基本的には出力したいファイル名に付加する日付のフォーマットを選択するだけですが、「/」はファイル名に使うことができないため、使用しないでください(自動的にAlteryxによって「/」は消されます)。また、ファイルの並び順のことを考えると、月の名前が英語で出力されるようなフォーマットを使うのも避けた方が良いかと思います。
設定のおすすめは、「yyyyMMdd」がシンプルで機能的かと思います。
設定②:フィールド付加ツール
こちらの設定もシンプルです。「生成されるレコードが多すぎる場合の警告」を「すべての付加を許可」にしてください。
設定③:データ出力ツール
こちらは色々と設定が必要です。上から見ていきたいと思います。
- ファイルまたはデータベースへ書き込む
ここは、実際に保存するファイルのファイルパスとファイル名を指定する場所です。まずは、ベースとなるファイルのファイルパスとファイル名をつけて保存しましょう。ここで指定したファイルパスに対して日付が付加されます。
- フィールドからファイル/テーブル名を取得
このオプションがポイントです。チェックを入れて、「ファイル/テーブル名に接尾辞を追加」を選択してください。
- ファイル名またはファイル名の一部を含むフィールド
「現在日時ツール」で付加したフィールド名「DateTimeNow」を選択します。
- フィールドを出力に保持
チェックを外しましょう。つけたままにすると、出力ファイルに不要なフィールド「DateTimeNow」が含まれてしまいます。もし、そのフィールドが必要であればチェックを入れたままにすれば残すこともできます。
2.時間まで付加して保存
例えば、ログ的なものであれば実行するたびに残したい、という要望もあるかもしれません。ファイル名に日付のみ付加している場合は同じ日にファイルを作成するとどんどん上書きしてしまいます。このような場合は、ファイルを作成した日時がほしい、ということになるかと思います。そのような場合はこちらの方法になります。
※以前掲載した方法だと、データ量が大きい際にファイルが複数できあがってしまうため、修正しました(2919年9月10日)
概要
方法1の現在日時ツールの後に「フォーミュラ(Formula)」ツールで時間を付与し、「データ出力(Output Data)」ツールにてファイル名の末尾などにフォーミュラツールで作成したフィールドの内容を付加して出力します。
ワークフローサンプル
各種設定
設定①:フォーミュラツール
フォーミュラツールの設定も上から見ていきたいと思います。
- 出力列
出力するカラム名(フィールド名)を指定します。今回は「DateTime」としています。
- 実際の計算式
日付と時間が出力されるような計算式を入力します。今回のサンプルでは、「YYYYMMDD_HHMMSS」形式としたいので、以下のような計算式としています。
DateTimeFormat(DateTimeNow(),"%Y%m%d_%H%M%S")
DateTimeNow関数は、ワークフロー実行時の日付と時間を日時形式で出力する関数です。「2019-08-26 08:17:29」といった形のフォーマットで出力されます。
DateTimeFormat関数は、日時型のデータを指定の書式で文字列型として出力する関数です。指定の行い方がわかりにくい(関数のところに記載があります)のが、ちょっと困りものです。
設定②:セレクトツール
現在日時ツールの出力は出力する文字数きっちりになっています。そのため、フォーミュラツールで文字数を増やすと増やした分の文字は切り捨てられます。
そのため、ここで文字数を十分な長さに変更する必要があります。
アンダーバーを追加し、時間を秒まで付与するのであれば、元々8文字のところを15文字まで増やせば問題ありません(思い切って255文字くらいまで増やしておくと、後々バグの原因にならないかと思います)。データ型は無理に変更する必要はないですが、日本語を使う可能性があるのであれば、V_WStringなどにしておいた方が無難です。
設定③:データ出力ツール
設定は「1.手軽に日付を付加して保存」の場合と同様です。
ただし、「ファイル名またはファイル名の一部を含むフィールド」の名前が今回は「DateTime」になります。
※設定が同じなので画像は省きます。
なお、フィールド付加ツールもワークフローの①と同様の設定を行ってください(すべての付加を許可する)。
その他
- 今回はCSVファイルでサンプルを作成していますが、Excelの場合はまた違った手法で行う必要があります(シート名に付加するようになってしまうため。この場合は、ファイルパス全文を変える必要があります)
- ちなみに、何もせずに普通にファイルを出力しておいて、そのファイルに対してAlteryxからバッチファイルを呼び出してファイル名をリネームする、という荒業(?)もあります
- 方法1でフィールド付加したあとに、フォーミュラで時間を付け加えるとバグる可能性があります(データがフォーミュラを通過中に時間が変わると、ファイルが複数に分かれます)
まとめ
今回は、出力ファイルの名前に日付や時間を自動で付加して出力する方法を紹介しました。
日付のみであれば、現在日時ツールとフィールド付加ツールの組み合わせでいけますが、時間まで必要であればフォーミュラツールの利用が必要になります。
ポイントはデータ出力ツールの設定ですので、こちらをマスターしていただければと思います。
サンプルWFダウンロード
※Alteryx Designer 2019.2.7.63499時点の情報です