デジタル推進課

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

KNIME - 条件によって異なる処理を - IF文・Switch文を習得する ~IF Switch・End IF~

 

はじめに

皆さんご存じ?KNIMEでのIF文を解説していきたいと思います。 今回は中級編に入れてもいいような内容です。

Rule Engine 変数の知識があることを前提にしているので、まだ知らないよって方は先に下記の記事を読んでみてください。

 

degitalization.hatenablog.jp 

degitalization.hatenablog.jp

 

 

 今回のテーマ ~IF Switch・End IF~

Switch文には、始まりがあって終わりがあります。また、Switch文には、Rule Engineが必須と言っていいくらいにセットで出てきます。

f:id:makkynm:20201101185201p:plain

今回のテーマ ~IF Switch・End IF~

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の設定次第ではできます。)

f:id:makkynm:20201101192524p:plain

Swich文の特徴

 

事前準備

さて、本題以外のNodeの設定について軽く触れます。

Date&Time Input

実行日を変数で取得するNodeです。変数名をTodayにして、Use Execution timeにチェックを入れます。これで実行日を取得できます。

f:id:makkynm:20201101190210p:plain

Configure - Date&Time Input

 

String Manipulation

コラムを追加する部分です。

月初の場合 - top 

f:id:makkynm:20201101201706p:plain

Configure - String Manipulation top 月初の場合

 

月初以外の場合 - bottom

f:id:makkynm:20201101201512p:plain

Configure - String Manipulation bottom 月初以外の場合

 String Manipulationについてはこちらから。

degitalization.hatenablog.jp

 

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)

f:id:makkynm:20201101185201p:plain

Workflow - IF Swich / End IF

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

IF文を使う - IF Switch – KNIME Hub

 

Confirm - Before After

IF Switchの部分では、取り込んだ社員表のTableそのままです。

Rule Engineでどちらに流れるかを変数で指定します。

その変数をもとにそれぞれのString Manipulationが実行されることで、End IFの時点では、実行日というコラムが追加されています。

f:id:makkynm:20201101195710p:plain

Confirm - IF Switch / IF End

Configure - Rule Engine Variable

まずはRule Engine Variableの部分のConfigureについてです。

これがIF Switchの条件IFの部分を担っている一番重要な部分です。Rule Engineは以前の記事で開設した通り、ラベル付けをする機能を果たしています。

IF Switchの場合は「both・bottom・top」の3つから選択できます。今回は、月初かそれ以外なので、bothという選択肢は適用しません。

f:id:makkynm:20201101200220p:plain

IF Switchの選択肢

f:id:makkynm:20201101201114p:plain

Configure - Rule Engine Variable

 

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の設定ができないですよね。

f:id:makkynm:20201101202317p:plain

Configure - IF Switch Step1

開発するときは、Step2の変数の設定をやめて、Select active portから後続過程の設定を確認してもいいと思います。

 

Step2 - Flow variable 変数を指定

Rule Engine Variableで作成した変数をFlow Variableから指定するのみです。

 

f:id:makkynm:20201101202337p:plain

Configure - IF Switch Step2

Configure - End IF

特に設定はいりません

 End IFは、IF Switchの分岐処理が終了したら挿入するNodeです。Concatenateと同じ役割を持っています。Configureを見ても、同じ機能であることが想像できます。

今回の例ではありえませんでしたが、bothを選択したときにRow IDが重複することがあると思うので、そのようなときにduplicate row ID handlingが重要になります。

ただし、Concatenateにはある、Column handlingのOptionがないので、bothの場合はColumnの数・名前は必ず同じでないといけません

f:id:makkynm:20201101203446p:plain

Configure - End IF

Concatenateについてはこちら。

degitalization.hatenablog.jp

 

 

 

 ちょっと一言

 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と書かれている部分が追加されていると思います。

f:id:makkynm:20201101191131p:plain

Configure - Date&Time Input

これは、KNIME Serverで実行した場合のWebの画面のことです。

KNIME Server で実行すると、Web上で下図のようなInputできる項目が出てきます。KNIME Serverなんて持ってない!という人でも、Interactive View というOptionからシミュレーションすることができます。

f:id:makkynm:20201101191235p:plain

Interactive view

f:id:makkynm:20201101190525p:plain

Interactive View - Date Input

 

 

おわりに

気合い入れすぎて少し長くなってしまいました! Switch文について、理解できたでしょうか。

今回、実行日をもとに分けるという例を挙げましたが、ほかにも用法はいくつかあるかもしれません。こんなことに使っているよ!という例があれば、教えていただきたいです。

寒くなってきましたね、2020年も残すところあと2か月です。風邪ひかないように気を付けながら頑張りましょう!ではまた!

 

 

少しの応援が大変励みになります。

 

余談 

今回ご紹介するのは、「グラントリノ」です。名作ですね。心難しいおじいさんが誠意を見せた少年に見せる男気がかっこよすぎます。あこがれるきれいな生き方だなと思います。 ぜひ見てほしいです。

 

グラン・トリノ (字幕版)

グラン・トリノ (字幕版)

  • 発売日: 2013/11/26
  • メディア: Prime Video
 
グラン・トリノ (吹替版)

グラン・トリノ (吹替版)

  • 発売日: 2013/11/26
  • メディア: Prime Video
 

 

www.youtube.com

 

参考リンク