デジタル推進課

KNIME・Excel Macro・Power Automateなど日々の業務で使用できる自動化ツールを中心に書き綴ります

KNIME - 特定のデータを抜き出す5 ~Rule-based Row Filter/Splitter~ 複数の条件でフィルタ

f:id:makkynm:20201220102315p:plain

 

 

はじめに

特定のデータを抜き出す第5弾、自由にフィルタを行えるRule-based Row Filter/Splitterを扱います。

 

 今回のテーマ ~Rule-based Row Filter/Splitter~

自由度が高いので、これを多用すると他の人が読みづらいWorkflowになってしまいます。

なので、複数条件を組み合わせたフィルタを行いたい場合など、他のNodeでは表現できないなと思うときによく使用しています。

f:id:makkynm:20200607114752p:plain

Rule-based Row Filter / Splitter

Workflowは下記からダウンロードできます。

kni.me

 

覚えてほしいこと

条件の記述方法は「条件 => TRUE 」

 

やりたいこと

複数の条件でフィルタをかけてみましょう。

出身が"~県"でなく、かつ入社日が20140401の行を抜き出してみます。 

f:id:makkynm:20200607124148p:plain

やりたいこと- 複数条件でフィルタ

 

 

Rule-based Row Filterの使い方

自由度の高いルール記述式フィルタです。条件が複数あるときによく使用します。

Workflow

f:id:makkynm:20200607123919p:plain

Workflow - Rule-based Row Filter

Confirm - Before After

このように、複雑な複数条件でもきれいに抜き出せるのがこのNodeのいいところです。出身が"~県"でなく、かつ入社日が20140401の行を抜き出しています。 

f:id:makkynm:20200607122213p:plain

Confirm - Rule-based Row Filter

Configure

 Configure の設定画面を見ていきます。この画面構成は、String Manipulationと同じですね!

f:id:makkynm:20200607130658p:plain

Configure - Rule-based Row Filter
Step1 - Expression 条件を記述

String Manipuratonと同様、ここが最も重要な部分です。判別条件を記載していきましょう。記述方法は、「条件 => TRUE 」というような形です。

デフォルトでは、すべての行の判定がFALSEになっています。なので条件を記載してTRUEの行を指定していきましょう。

 

まずは条件を記載していきます。String Manipuratonと同様、使用できるコラムや変数一覧、条件式は緑の枠から選べます。数値だけでなく、文字列も条件に記載できます。

今回の条件は、「出身が"~県"でなくかつ入社日が20140401」です。

なので使用する関数は下記の通りですね。

  • NOT? :NOT直後の表現が否定になる。
  • LIKE ? :LIKE直後の文字列をワイルドカードが含まれている文字列として検索する
  • AND :複数の条件をつなげる。「かつ」という意味
  • =:数値や文字列どちらでも使用できる。「等しい」という意味

 

今回の条件の場合、下記のような形で書けます。1つ1つ分解していくと分かりやすいですかね。()で囲んでいるのは、必ずしも必要ではありませんが、分かりやすいようにこのようにやることをおススメします。 

f:id:makkynm:20200607130941p:plain

条件
Step2 - Include / Exclude設定

TRUEになった行を抜き出すのか、FALSEになった行を抜き出すかの設定です。基本はTRUEになったものを抜き出すという形でいいのでデフォルト設定のIncludeでいいと思います。

 

 

 ちょっと一言

Configureの画面にある最初の4行「//」の意味

必ずデフォルトで入っている、1行目から4行目にある緑色の行は、コメントとして認識されていて、書き方の例を示しています。このNodeでは、「//」から始まる行はすべてコメントとして認識されて、利用されません。

どうしても自由度が高いので、メモを残さないとブラックボックスツールになりやすいです。なので、このコメント行を利用して、1行1行の意味を文字で書き起こしていくことをおススメします。

 

SplitterのConfigure画面

何度も出てきていますが、FilterとSplitterは設定画面が同じです。なので、今回も一応Configureの画面だけ貼っておきます。デフォルトでは、TRUEが上のOutputとして出力されますが、Step2の部分で上下を入れ替えることも可能です。

f:id:makkynm:20200607125119p:plain

Configure - Rule-based Row Splitter

複数行にすれば、OR条件を表現できる

今回例として1行のみ記載しましたが、複数行を記述してフィルタ条件をいくつも設定することもできます。

例えば、今回の条件に「出身地が兵庫県はTRUE」という条件を追加したとします。するとOutputに1行追加されます。

f:id:makkynm:20200607125850p:plain

複数行にすればOR条件

またこれらはOR条件なので、例えば7行目に「東京都ならFALSE」というような条件を追加しても、無意味です。もし東京都の結果を抜きたいとしたら、5行目のAND条件を追加しましょう。

f:id:makkynm:20200607130343p:plain

複数行にすればOR条件

 

 LIKEとMATCHESの違い

これらは、Row Filterにも出てきた、3つのOptionの違いです。

LIKEオプション:contains wild cardsワイルドカードを含む)

MATCHESオプションregular expression正規表現を含む)

 

また、Rule-based Row Filter/Splitterでは、case sensitive matchにチェックがついているような扱いになっているようで、常に大文字と小文字は区別されます

 

例にある TRUE => TRUE の意味

これを使用すれば、デフォルト設定をTRUEに変更することができます。

何も設定を行わないと、条件に当てはまれなかったものはFALSEとして扱われます。

何も条件を記述しないで実行するとどうなるか、実験してみましょう。

f:id:makkynm:20200607123105p:plain

実験:何も条件を記述しない(デフォルト設定の確認)

次に、TRUE => TRUEだけを記述してみましょう。すると、デフォルト設定がFALSEからTRUEに変更されます。

f:id:makkynm:20200607123827p:plain

実験TRUE => TRUE デフォルト設定がTRUEに変更

 

おわりに

簡単だったでしょうか?これで大体のデータが自由に抜き出せるようになったと思います!

KNIMEのユーザってどれほど増えているんでしょうか、、インフォコムさんからのセミナーの案内、来てはいますがどれくらいの方が参加しているのかなーと。。気になるところです。

 

 

 

参考リンク