はじめに
皆さんご存じ?KNIMEでのIF文を解説していきたいと思います。 今回は中級編に入れてもいいような内容です。
Rule Engine と変数の知識があることを前提にしているので、まだ知らないよって方は先に下記の記事を読んでみてください。
今回のテーマ ~IF Switch・End IF~
Switch文には、始まりがあって終わりがあります。また、Switch文には、Rule Engineが必須と言っていいくらいにセットで出てきます。
Endがなくても別に実行はできるですけどね、、あった方がWorkflowがきれいで見やすいです。
覚えてほしいこと
KNIMEではIF文(条件分岐)の、条件の部分をRule Engineが、分岐の部分をSwitch文が担当
やりたいこと
1.実行日が月初の場合はファイルを出力。
2.実行日が月初の場合は「実行日」のコラムに"月初"と、それ以外の日付の場合は「実行日の日付」を出力
IF文とは? - KNIMEでのIf文
すごい基礎的な部分なので、皆さんご存じだとは思いますが、
そもそもIF文とは、日本語で条件分岐とも言われるもので、「もしOOなら、XXする」というような条件を作る構文です。ただ英語のifを日本語訳しただけですけどね。
KNIMEでは、Rule Engineと組み合わせてIf文を表現します。条件分岐の、条件の部分をRule Engineが、分岐の部分をSwitch文が担当しています。
IF Switchは、Swich機能を担っておりRule Engineによるラベルを基準にWorkflowを振り分けます。
Switch文の特徴
特徴として、Switch文により該当しなかった方のFlowは、下記のようになります。
1.Portに×がつく
2.信号がモノクロになる
これにより、Switch文に該当しない方は実行しなくなります。
また実行しなくなるだけでなく、Configureの変更もできなくなります。(Switch Nodeの設定次第ではできます。)
事前準備
さて、本題以外のNodeの設定について軽く触れます。
Date&Time Input
実行日を変数で取得するNodeです。変数名をTodayにして、Use Execution timeにチェックを入れます。これで実行日を取得できます。
String Manipulation
コラムを追加する部分です。
月初の場合 - top
月初以外の場合 - bottom
String Manipulationについてはこちらから。
IF Switch・End IFの使い方
IF Switch / End IFはセットみたいなものなので、一緒に解説したいと思います。
また、Rule EngineもIfの部分を担う大切な部分なので、一緒に解説します。
Workflow
Workflowの全体的な流れは下記の通りです。
1.社員表を読み込んでから、Date&Time Inputを実行して実行日を取得しています。
2.取得した実行日をRule Engineを通して月初かどうかを判断します。(条件IF文)
3.月初か月初以外かで別々の処理を行います。また、月初の時はExcel Writerで書きだします。(分岐Swich文)
4.実行後にConcatenateの処理を行います。片方しか実行されない場合は片方のTableのみを参照します。(If文の終了 End IF)
Workflowは下記からダウンロードできます。
IF文を使う - IF Switch – KNIME Hub
Confirm - Before After
IF Switchの部分では、取り込んだ社員表のTableそのままです。
Rule Engineでどちらに流れるかを変数で指定します。
その変数をもとにそれぞれのString Manipulationが実行されることで、End IFの時点では、実行日というコラムが追加されています。
Configure - Rule Engine Variable
まずはRule Engine Variableの部分のConfigureについてです。
これがIF Switchの条件IFの部分を担っている一番重要な部分です。Rule Engineは以前の記事で開設した通り、ラベル付けをする機能を果たしています。
IF Switchの場合は「both・bottom・top」の3つから選択できます。今回は、月初かそれ以外なので、bothという選択肢は適用しません。
Configure - IF Switch
IF Switchの設定は簡単です。
Step1 - Active all outputs during configuration step のチェックを外す
まずは、 Active all outputs during configuration step のチェックを外します。これは、誤作動を防止するためです。
ちなみにこのOptionは後続過程の開発用です。これにチェックを入れると、どちらのPortのFlowも設定を行うことができます。例えばtopと変数で指定しても、bottomの方のNodeのConfigurationを変更することができます。チェックを入れないと、信号機が消えてしまって後続Nodeの設定ができないですよね。
開発するときは、Step2の変数の設定をやめて、Select active portから後続過程の設定を確認してもいいと思います。
Step2 - Flow variable 変数を指定
Rule Engine Variableで作成した変数をFlow Variableから指定するのみです。
Configure - End IF
特に設定はいりません。
End IFは、IF Switchの分岐処理が終了したら挿入するNodeです。Concatenateと同じ役割を持っています。Configureを見ても、同じ機能であることが想像できます。
今回の例ではありえませんでしたが、bothを選択したときにRow IDが重複することがあると思うので、そのようなときにduplicate row ID handlingが重要になります。
ただし、Concatenateにはある、Column handlingのOptionがないので、bothの場合はColumnの数・名前は必ず同じでないといけません。
Concatenateについてはこちら。
ちょっと一言
IF Switch文とRow Splitterの使い分け
個人的によく混同しがちなのが、IF Switch文とRow Splitterです。どちらもRule Engineで基準を設けてあげれば、処理を分けることができます。
私が思うこれらのすみ分けは、下記の通りです。
Rule Engine + IF Switch + End IF
テーブル全体に対して処理を分けたい場合
Switch文はフィルタリングを行いません。テーブル全体で処理を分けたいときに有効です。
Workflowから、どの条件を通ったのかを判断したい場合
Workflowからどの条件で通ったのかが分かるのも利点だと思います。SplitterではOutputを確認しなければわかりません。
Tableが空になる可能性がある場合
まだ解説していませんが、Empty Table SwitchというNodeがあります。通常Tableが空になると、Workflowとしてはエラーとして処理されるため、その後の処理を継続することができません。そのテーブルにデータがないとしたら出力したくない場合や、処理を継続したい場合などに有効です。
Rule Engine + Row Splitter + Concatenate
テーブルの一部に対して処理を分けたい場合
Splitterは、どちらかのPortが消えることがありません。基準に沿ってTableの内容を分けるだけなので、ある基準でTableの内容を分けて別々の処理を行いたい場合はSplitterを使用するといいと思います。
Date&Time InputとDate&Time Configureの違い
今回出てきたDate&Time Inputと変数の記事で扱ったDate&Time Configureの違いについてです。どちらも実行日を変数で取得するNodeです。
機能・画面ほとんど同じですが、KNIME Serverを使用するときに違いがあります。Configureの中でInputの方ではWizardと書かれている部分が追加されていると思います。
これは、KNIME Serverで実行した場合のWebの画面のことです。
KNIME Server で実行すると、Web上で下図のようなInputできる項目が出てきます。KNIME Serverなんて持ってない!という人でも、Interactive View というOptionからシミュレーションすることができます。
おわりに
気合い入れすぎて少し長くなってしまいました! Switch文について、理解できたでしょうか。
今回、実行日をもとに分けるという例を挙げましたが、ほかにも用法はいくつかあるかもしれません。こんなことに使っているよ!という例があれば、教えていただきたいです。
寒くなってきましたね、2020年も残すところあと2か月です。風邪ひかないように気を付けながら頑張りましょう!ではまた!
少しの応援が大変励みになります。
余談
今回ご紹介するのは、「グラントリノ」です。名作ですね。心難しいおじいさんが誠意を見せた少年に見せる男気がかっこよすぎます。あこがれるきれいな生き方だなと思います。 ぜひ見てほしいです。
参考リンク
- KNIME公式Node Pit(英語):
- KNIME Example Workflow(英語):
- KNIME e-Learning(英語):
-
KNIME TV (英語):