LoginSignup
3
1

【UiPath】Studioにおけるフィルター操作(後編)

Last updated at Posted at 2023-12-25

1.はじめに

 Studioにおけるフィルター操作方法に関して、前回はFilter Data Table ActivityとExcel Filter Activityという2つの方法を紹介しました(興味のある方はこちらをご参照ください)。コードをいじらずにExcelのデータが抽出できる以上の方法は、使いやすくて非常に便利だと言えます。ただし、データ量が膨大で処理のスピードが遅くなったり、フィルター条件が複雑でデータが絞りにくくなったりすることもあります。そのため、今回は、その問題に対応する2つの方法をご紹介しようと思います。

2.Studioで利用できるフィルター操作方法

 ①Filter Data Table Activity(前編)
 ②Excel Filter Activity(前編)
 ③Selectメソッド
 ④LINQクエリ

3.環境情報

 利用する環境は以下の通りとなります。

ソフトウェア名 バージョン情報
OS Windows10
Studio 23.10.0
UiPath.EXCEL.Activities 2.22.2

4.データ準備とワークフローの完成図

 より容易に本文を理解できるように、筆者は以下のサンプルデータを用意しました。
 無題4.png
 なお、以下はSelectメソッドやLINQクエリを利用したワークフローの完成図です。ご参照ください。
 2.jpg
            Selectメソッド

 1.jpg
            LINQクエリ

5.具体的な操作方法

③Selectメソッド

 Selectメソッドは、データテーブルを操作するメソッドなので、Excelのデータを読み込み、データテーブルとして抽出する必要性があります。
無題1.png

 データテーブルにした後、代入アクティビティを配置し、以下の形で書きます。

 保存先のDatatable変数=操作対象のDatatable変数.Select(“[列名]='条件'“).CopyToDatatable

 文字列のデータに対してフィルターをかける場合、条件をシングルコーテーションで囲みます。例えば、部門をITに限定する場合、 [Department]='IT' と書きます。
 数値型のデータに対してフィルターをかける場合、条件の外でシングルコーテーションはいりません。例えば、給料が20000以下のデータに絞りたいとしたら、書き方は [Salary]<20000 となります。

 SelectメソッドでITとHR部門にあたったデータを抽出してみましょう。代入式の書き方は以下のようです。
 無題2.png
 その後、絞ったデータをExcelに書き込んだら、ちゃんとできましたね↓
 無題5.png

 そのうえ、条件がどんどん増える場合、論理演算子と括弧を組み立て、フィルター条件をつなげばいいと思います。例えば、上記のデータで、さらに給料が20000以下という条件を追加したい場合、書き方は以下のようとなります。

 無題3.png

 その結果、部門がITかHR、且つ給料が20000以下のデータを取得しました。

 画像4.png

④LINQクエリ

 LINQ(Language-Integrated Query)は、.NET Frameworkで提供されている言語統合型のクエリ技術です。これは、配列、コレクション、XML文書、データベースといったデータソースに対して、SQLに似たクエリ構文やメソッド呼び出しを使用してデータを効果的にクエリおよび変換するための手段を提供します。 LINQを使用すると、データに対する複雑な操作をより簡潔で読みやすい形で表現できます。UiPath StudioでLINQコードを使用する際には、主にVB.NETのLINQクエリを組み込むことが一般的です。
 以下はUiPath StudioでLINQを使用する基本的な手順です。

 i.Excelのデータをデータテーブルとして抽出します。(本文において、アウトプットをdbt1に保存します)
 ii.代入アクティビティを配置し、左側で絞った結果を格納する変数を作成し、右側はLINQクエリの構文を入れます。絞った対象により、書き方は変わります。

ケース 構文
数値フィルター 保存先のDatatable変数=操作対象のDatatable変数.AsEnumerable().Where(Function(r)Cint(r("列名"))<条件).CopyToDataTable
文字列フィルター 保存先のDatatable変数=操作対象のDatatable変数.AsEnumerable().Where(Function(r)r("列名").ToString()="条件").CopyToDataTable
複数条件の組み立て 保存先のDatatable変数=操作対象のDatatable変数.AsEnumerable().Where(Function(r)Cint(r("列名"))<条件 AndAlso r("列名").ToString()="条件").CopyToDataTable

 iii.データテーブルをExcelに書き込む。

 コードが長くて、理解しづらいところもあるため、少し説明いたします。
 まず、AsEnumerableはLINQの中の拡張メソッドの一つです。LINQクエリはDataTable を直接処理できません。AsEnumerableを使用すると、DataTable を LINQ で処理できる型IEnumeable<DataRow>に変換できます。その後のWhereなどのLINQ操作が適用できるようにしているものと考えられます。
 次に、Whereはのメソッドで、コレクション内の要素をフィルタリングするために使用されます。これにより、特定の条件を満たす要素だけが結果セットに含まれます。
 さらに、rはコレクション内の各行のデータを表します。ラムダ式では、rはパラメータ名です。r("salary")またはr.Item("salary")を使用して現在の行の "salary" 列の値を取得し、r("Department")を使用して "Department" 列の値を取得できます。
 最後に、Cint( )とToString.( )は変数をそれぞれ数値と文字列に変換するメソッドです。

 では、実例を見てみましょう。
 例1、所属がITのデータを抽出します。
 無題6.png
 そうしたら、IT以外のデータが削除されました。
 画像6.png

 例2、所属がITで給料が20000以下のデータを抽出します。
 無題7.png
 結果は以下の通りです。
 画像7.png
 ちゃんと取りましたね。

6.最後に

 以上でStudioにおけるフィルター処理の4つの方法をご紹介しました!Filter Data Table ActivityとExcel Filter Activityとも、コードの使用がほぼないため、初心者にとってともて使いやすい方法となります。一方で、フィルター操作を高速化し、複雑のフィルター条件でデータを絞りたい方は、ぜひSelectメソッドやLINQクエリを使ってみてください。

代入式の最後に、.CopyToDatatableが入っているのですが、それは③Selectメソッドで抽出した結果がDataRow型であるためです。.CopyToDatatableを削除するとしたら、代入アクティビティの左側の変数もDataRow型に変更しなければなりません。一方で、④LINQでDataTable.AsEnumerableに対してSelectを呼び出すと、その返り値の型はIEnumerable<DataRow>型となるので、.CopyToDatatableを削除するとしたら、代入アクティビティの左側の変数の型は、IEnumerable<DataRow>型とする必要があります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1