デスクトップ版Power Automate(以下、PAD)でCSVファイルから目的のデータを抽出する際、多くの場合はCSVファイルを読み込んだ後、Ifアクションなどを使った条件を設定し、抽出する方法が一般的です。しかし、SQLを使用することでフローを簡素化し、処理速度を向上させることができます。本コラムでは、その設定方法を紹介します。
■SQLを使用するための準備
①「Schema.ini」の作成
CSVファイル内のデータをSQLで抽出する際には「Schema.ini」という設定ファイルが必要です。データベースとして扱いたいCSVファイル内の項目を「Schema.ini」ファイル内で定義します。
日付,商品名,数量,売上
2024-01-01,もも,12,2400
2024-01-01,りんご,20,3000
2024-01-02,ぶどう,20,6000
2024-01-02,もも,1,200
図1:テストデータ(ファイル名:果物年間売上データ.csv)
[果物年間売上データ.csv]
Format=CSVDelimited
ColNameHeader=True
MaxScanRow=0
Character=ANSI
Col1=日付 Date
Col2=商品名 Text
Col3=数量 Long
Col4=売上 Long
図2:Schema.iniファイル記述例
図1は果物の年間売上データを想定したテストデータの先頭を表示しています。項目は日付、商品名、数量、売上の4種類の構成としています。
図2はテストデータに基づくSchema.iniファイルの設定で各行は以下の通りです。

6行目以降の項目名とデータ型の設定はCSVファイル内のデータから判断し、設定を行います。日付であればDate型、数値であればLong型というように任意に設定を行ってください。
②「Schema.ini」ファイルの保存場所
「Schema.ini」ファイルは対象のテストデータと同じフォルダ内に保存します。
③PADのアクションを設定
アクションペインの「データベース」カテゴリ内のアクションを使用します。
各アクションの順番と設定値は以下の通りです。
1「SQL接続を開く」
→データベース(今回だと果物年間売上データ.csv)と接続を行います。

接続文字列に以下を設定します。
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\work\コラム;Extended Properties=”text;HDR=Yes;FMT=Delimited”;
図4:接続文字列設定例
図4内の「Source=」には「果物年間売上データ.csv」と「Schema.ini」ファイルが保存されたフォルダパスを指定します。
2「SQLステートメントの実行」
→①で接続したデータベースから任意で条件を指定し、データを抽出します。

SQLステートメントには必要な条件に応じてSQL文を設定します。
SELECT * FROM [果物年間売上データ.csv]
図6: SQLステートメント設定例
図6は果物年間売上データ.csvからすべてデータを抽出するSQLステートメントとなります。(SQL構文の詳細については割愛します。)
3「SQL接続を閉じる」
→データベースとの接続を閉じます。

1「SQL接続を開く」アクションで作成された変数(%SQLConnection%)を指定することで接続を閉じることができます。
■りんごの売上合計を算出してみる
SQLステートメントに条件を設定し、果物年間売上データ.csvからりんごの売上合計を算出してみます。
SELECT SUM([売上]) As [総売上] FROM [果物年間売上データ.csv] WHERE 商品名=’りんご’
図8: りんごの売上合計抽出のSQL設定例
このように、SQLステートメントの条件を変更するだけで算出が可能です。合計のほか平均、最大値及び最小値や日付ごとに算出することも可能です。
■アクション数を比較してみる
<SQLを使用する場合>

<SQLを使用しない場合>

SQLを使用するとアクション数が半分以下になり、処理速度の向上が期待できます。
SQLを使用したデータの抽出方法を紹介させていただきました。PADではCSVファイルのほかにもExcel、Microsoft Office Access、MySQLなど様々なデータソースに対してSQLを使用できるため環境に応じた最適な手法を選択してください。

技術とノウハウでデジタルシフトをサポート
中小企業の頼れるパートナー
執筆者: 村瀬 俊昭(株式会社クロスディーズ システム技術統括エンジニア)
前職では社内システムの運用、サーバーの監視、システム運用業務の構築、システム開発業務といった業務に幅広く携わる。2021年より株式会社佐々木総研にてロボットの設計・開発、社内SEとして従事している。釣りが趣味で、大のビール好き。