alteryxでの複数 Excel/CSV 読み込みのパターンと注意点

alteryxで複数ファイル(Excel/CSV)を読み込む際の注意点をまとめました。
2022.11.30

alteryxで複数ファイル(Excel/CSV)を読み込む方法はいくつか存在します。パターン別に注意点を整理しておきたく記事としました。

前提条件

下記の環境で検証しています。
・Windows 10 Pro
・Alteryx Designer 2022.1.1


複数ファイル読み込みパターン

業務で発生するような、CSV・Excelそれぞれの複数ファイル読み込み時のパターンとしては下記のようなものがあげられます。
・複数のCSVまたはExcelファイル
・単一Excelファイル内の複数シート
・複数Excelファイル内の複数シート

また、それぞれの状況において、対象データのデータ構造(フィールド数、フィールド名、データ型)が異なる場面も多々あります。
後述する通り、alteryxにおける複数ファイル読み込みのツールはいくつかありますが、データ構造の違いがある場合、意図した通りにデータが読み込まれない場合があるので、注意が必要です。

使用ツール

alteryxでの複数ファイル読み込みには、下記が使用されることが一般的と思います。それぞれの特徴と注意点を見ていきます。
・データ入力ツール
・動的入力ツール
・バッチマクロ

データ入力ツール

ファイル参照ウィンドウで、ファイルパスの一部としてワイルドカードを入力することで、複数ファイルを指定することができます。

複数ファイルの読み込みには、各ファイルが下記の条件を満たすがあります。

複数ファイル読み込みの条件

1.フィールド数が同一
2.各フィールドのデータ型が同一

CSVファイルの場合、データの内容に関わらず、すべての列が文字列のデータとして扱われるので、自動的に2つ目の条件は満たされることとなります。


注意点

データ入力ツールを使用した一括読み込みの場合、はじめに読み込まれたファイルのデータ構造を基準とし、以降に読み込まれるファイルのデータ構造が異なる場合、データが読み込まれない、意図しない形で読み込まれる可能性があります。具体的には、下記に注意します。

フィールド数が異なる入力が存在する場合(CSV/Excel)
はじめに読み込まれたファイルと、フィールド数が異なるファイルはスキップされ、読み込まれません。実行時は、エラーとならずに警告となるため、一括読み込み時は、メッセージの確認が推奨されます。

フィールド名が異なる入力が存在する場合(CSV/Excel)
一括読み込み時のフィールド名は、はじめに読み込まれたファイルが基準となります。はじめに読み込まれたファイルと、フィールド名が異なるファイルが含まれる場合、意図したフィールド名とならない場合がある点に注意が必要です。また、この場合、フィールド名が異なっても、そのファイルの読み込みがスキップされることはありません。結果ウィンドウには、下記のような警告が表示されます。
※ツール番号、ファイルパスは環境によって異なります。

Warning: データ入力 (71): ファイル "C:\XXX\data\sales_B.xlsx|||`Sheet1$`" は、セットの1番目とは異なるフィールド名を持っています: "salesVal"

データ型が異なる入力が存在する場合(Excel)
この場合の処理は、フィールド数が異なる入力が存在する場合と同様です。はじめに読み込まれたファイルを基準に、データ型が異なる列がある場合、そのファイルの読み込みがスキップされ、結果ウィンドウに警告として表示されます。上記の通り、CSVファイルの一括読み込みの場合は、読み込み時のデータ型を気にする必要はありません。

Warning: データ入力 (72): ファイル "C:\XXX\data\sales_B.xlsx|||`Sheet1$`" は、セット内の最初のファイルとは異なるスキーマを持ち、スキップされます

動的入力ツール

動的入力ツールは、入力アンカーを持ち、他ツールからの出力に応じて、読み込むファイルを変更できるツールです。複数ファイル読み込み時は、ディレクトリツールと合わせて用いられることが多い印象です。
03-03-dynamic-input

上記のワークフローは、動的入力ツールを使用した基本的なファイル一括読み込みの処理です。具体的には、下記を行っています。
①:ディレクトリツールで指定のディレクトリからファイル情報を取得。
ここでもワイルドカード指定が可能です。

03-04-dynamic-input-config

出力の一部は下図の通りです。ファイルのフルパスやファイル名が取得されます。

03-05-dynamic-input-out

②:動的入力ツールには、下記の設定をしています。

03-06-dynamic-input-out

・[フィールド]の項目に、データソースのリストが記載されたフィールド名を指定します。今回の場合、ディレクトリツールの出力列である[FullPath]を指定しています。
・[アクション]の項目に、「ファイルパス全体を変更する」を指定することで、ディレクトリツールの[FullPath]列の行ごとのファイルを読み込むような設定となっています。
・[データ入力ソーステンプレート]では、入力のテンプレートとなるファイルを選択します。実際に読み込ませたいファイルのうちの1つを指定しておけば問題ありません。
※テンプレートとはじめに読み込まれるファイルのデータ構造が異なる場合、はじめに読み込まれたファイルのデータ構造が優先されます

動的入力ツールに関しての詳細はこちらを参照ください。
AlteryxのDynamic Inputツールの話 | Developers.IO


複数ファイル読み込みの条件

動的入力ツールでの複数ファイルの読み込み時は、各ファイルが下記の条件を満たすがあります。
※データ入力ツールと同様
1.フィールド数が同一
2.各フィールドのデータ型が同一

注意点

下記の通り、データ型が異なる場合の結果ウィンドウの表示を除いて、データ入力ツールと同様です。

パターン 処理 結果ウィンドウの表示
フィールド数が異なる入力が存在する場合(CSV/Excel) はじめに読み込まれたファイルを基準とし、フィールド数が異なるファイルはスキップされる 警告
フィールド名が異なる入力が存在する場合(CSV/Excel) はじめに読み込まれたファイルを基準とし、フィールド名が異なるファイルはスキップされず読み込まれる 警告
データ型が異なる入力が存在する場合(Excel) はじめに読み込まれたファイルを基準とし、データ型が異なるフィールドがあるファイルはスキップされる エラー(※)

※データ入力ツールでは警告となる点に注意。

03-07-dynamic-input-diff


Excelの複数シート読み込み

動的入力ツールを使用すれば、複数シートから構成されるExcelファイルの一括読み込みも可能です。
複数シートであっても、読み込みの条件・注意点は動的入力ツールでの複数ファイル読み込み時と同様で、各シートが同じデータ構造である必要があります。
動的入力ツールを使用した複数シート読み込みの主な方法は下記の通りです。

1.データ入力ツールからファイルのフルパス・シート名を取得し、動的入力ツールのインプットとする
ワークフローの構成例は下記の通りです。

03-08-dynamic-input-sheet

各ツールの設定は下記の通りです。
データ入力ツール
①:ファイル参照ウィンドウでExcelを指定すると、下記の設定が表示されるので「シート名のリストのみをインポート」を選択します。

03-09-dynamic-input-sheet-config

②:ツールのオプション設定[ファイル名をフィールドとして出力する]で「フルパス」を選択します。

03-10-dynamic-input-sheet-config

上記の設定を行うと、データを読み込むのではなく、下記のように、ファイルのフルパスとシート名が得られます。

03-11-dynamic-input-sheet-coutput

フォーミュラツール
フォーミュラツールでは、項目「Filename」に対して、下記の式を適用し、各シート名を含むフルパスに変更します。
Replace([FileName],"",[Sheet Names])

動的入力ツール
[フィールド]の項目に、データインプットツールより取得した「FileName」を指定し、[アクション]の項目に、「ファイルパス全体を変更する」を指定します。これによりフルパスを通して「FileName」列記載のシートが読み込まれます。

2.データ入力ツールからシート名を取得し、動的入力ツールのインプットとする
こちらは上記と同様の方法で、動的入力ツールの設定を変更する方法です。
[フィールド]の項目に、データインプットツールより取得した「Sheet Names」を指定し、[アクション]の項目に、「ファイル/テーブル名を変更する」を指定します。
これによりテンプレートで指定したデータソースの「FileName」列記載のシートが読み込まれます。

バッチマクロ

データ入力ツール・動的入力ツールでは、データ構造が異なる(列数・データ型)ファイルがある場合、そのファイルはスキップされ読み込むことはできない仕様となっていました。
バッチマクロを使用すると、データ構造が異なってもそのファイルをスキップすることなく読み込むことができます。
複数ファイルを読み込むバッチマクロの作成方法は、下記を参照ください。Excelの場合、複数ファイル・複数シートでも読み込み可能です。

【Alteryx】ファイル名もシート名も異なるExcelファイルのデータを一気に読み込めるマクロを作ってみました| Developers.IO


注意点

データ構造が異なるファイル読み込む際は、バッチマクロのインターフェースデザイナーで出力モードの設定を変更します。

設定項目と内容は、下記の通りです。

出力モード 概要
すべての反復は同じ出力スキーマ
(異なる場合はエラー)
デフォルト設定。データ構造が異なる場合、エラーが発生します。
フィールド名による自動設定
(すべての反復が実行されるまで待機)
各ファイルで同じ名前のフィールドは同一フィールドとみなされます。
データ構造が異なる場合、すべての値を保持できるデータ型が選択されます。
位置による自動設定
(すべての反復が実行されるまで待機)
フィールドはレコード内の位置によって照合されます。
列名は、はじめに反復があるファイルに基づいて決定されます。
データ型の扱いは、フィールド名による自動設定と同様です。

バッチマクロ

さいごに

実務で複数ファイルを一括で読み込む場面は多く、alteryxでもそれに対応したツールは存在します。ただし、少し複雑な処理になる場面が多く、ツールの仕様と実際に読み込まれるデータの双方に目を向けないと、本来読み込むべきデータが読み込めていなかった!などということになりかねません。
ごっそりデータが抜けており、後工程で気付くことができればよいですが、そうでない場合、誤った数値で意思決定に進んでしまうかもしれないので、注意しなければと改めて感じました。

参考

The Ultimate Input Data Flowchart