デジタル推進課

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

KNIME - 変数を使ってExcelに日付のSheetを追加してみよう ~Flow variable / Date&Time Configuration / Excel Sheet Appender~

f:id:makkynm:20201219234307p:plain

 

 

はじめに

さて、中級編を始めていきたいと思います!中級編だからと言って、難易度が変わるわけではありません。ただ紹介するNodeの種類が増えるだけです!

初級編・中級編・上級編の判断は個人的な経験ベースで使用頻度をもとに、独断と偏見で決定しています。使用頻度が低いものは、初級編のNodeを組み合わせれば表現できるものが多めです。

あまりにNodeの種類を増やしすぎると、受け取り側の人が困っちゃいますからね。

初級編:超頻出

中級編:頻出

上級編:たまに使う

 

 さて、中級編の第1回目は変数です。変数を使って、ファイル名を日付にしてみましょう。また、その他の変数活用法まで説明します。

 

今回紹介するExcel AppenderはKNIME version 4.3以降、Excel Writerに統合されました。

 

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

kni.me

 

 今回のテーマ ~Flow Variable~

 

f:id:makkynm:20200516110833p:plain

Flow Variable

覚えてほしいこと

変数とは値を入れておく箱

KNIMEの変数は赤い線

KNIMEは実行順を指定するのにも使える

 

やりたいこと

変数の使い方の例として、Sheet1の元データを今日の日付のSheet名でコピーを作成してみましょう。

今回は、Inputファイルと同じファイルに出力するので、ファイル名も変数として扱ってみたいと思います。これをすることでWriterでも同じ設定をしなくてできます。

f:id:makkynm:20200516113022p:plain

やりたいこと - 同じファイルに今日の日付のSheet名でコピーを残す

 

変数とは?

変数の概念は”箱”です。

Configureの設定"箱"にしておくことによって、その中の値を後から変更してもConfigureを変えなくて済むようにしたい!というのが元々の思想です。

例えば、出力のファイル名に今日の日付を入れたいとします。その時、変数を使わなければ、いちいち実行時に各NodeのConfigureを開いて、今日の日付をマニュアルで入力して、実行しないといけません。

しかし、変数を使うと「今日」という箱を作って、Configureを指定することができます。すると、各NodeのConfigureはその箱の値を見に行くので毎回変更せずに済みます。箱の値に毎日今日の日付を取得して入れるというNodeを作れば、実行するために自動的に日付が変わっていくことになります。

  

f:id:makkynm:20200516111322p:plain

変数を使う - Flow variable

 

KNIMEでの変数

Flow Variableというのが変数です。実はすべてのNodeで変数の設定を持ってるんです。なので、すべてのNodeで変数の受け渡しが可能です!ただデフォルトでは見えていません。

KNIMEに限らずですが、変数には2種類あります。

グローバル変数(Global variable)

ワークフロー全体でどこでも使える変数

ワークフロー全体で使用したい場合に使う。

例えば、10%売り上げが増加した時のシミュレーションを行うWorklowだったとしましょう。このパーセンテージをGlobal変数にするといいです。

このパーセンテージは、利益計算だけでなく、在庫計算などワークフロー全体で使用するものだとします。こんなとき、各Nodeでいちいち一時的な変数を作っていると、20%に変えたい!というとき、変更が大変ですよね?こんな風にいろんなNodeに同じ値が使用される場合に便利です。

ローカル変数(Local variable)

変数を作ったNodeより後の接続しているNodeでのみ使える変数

短期的に使いたい場合に使う。

 ファイル名の日付を取得する場合など、ファイルを書き出すときだけ必要!と短期的に使用する場合が便利です。

私はほとんどローカル変数を使っています。見える変数が多すぎても途中でわけわからなくなりますからね!

 

KNIMEでの変数の作り方

KNIMEで変数を作る方法は4種類ほどあります!今回は作り方2と作り方4を使用してファイルパスと今日の日付の変数を作っています。

作り方1 - ワークフローの設定で作る

グローバル変数の作り方です。KNIME Explorer から、Workflowを選択して右クリックしましょう。"Workflow variables..." を選択します。

f:id:makkynm:20200516120422p:plain

KNIME - グローバル変数の作り方

出てきた画面からグローバル変数を作っていきます。Addを押すと小さい画面が出てきて、名前と値、データ型を指定できます。

Variable Typeはデータ型のことです。StringのほかにIntegerやDoubleも作成可能です。値を変更したい場合は、変更したい変数を選択してEditを押せば可能です。

f:id:makkynm:20200516120551p:plain

KNIME - グローバル変数の作り方

どのNodeで見ても、この変数が見えるようになります。

 

作り方2 - 通常NodeのFlow Variableボタンから作る

Excel ReaderのConfigureからFlow variableボタンでファイルパスの変数を作ってみましょう。この変数は、次のExcel Sheet Appenderに使用します。

普通にBrowseからファイルパスを指定した後、"V" と書いてあるボタンを押します。

f:id:makkynm:20200516122910p:plain

変数の作り方2 - Flow Variable ボタン

変数を作りたいので、Create Variableにチェックを入れて変数の名前を入力します。

すると、FilePathという箱に入力したファイルパスが入れられることになります。

f:id:makkynm:20200516123032p:plain

変数の作り方2 - Flow Variable ボタン

 

作り方3 - 通常NodeのFlow variableタブから作る

Flow Variableボタンがない時もあります。こんな時は、Flow Varialeタブから作りましょう。ほとんどすべてのNodeのConfigureにFlow Variableタブはあると思います。

例えばExcelの読み込み時に指定したSheet1というSheet名をSheetNameという変数として作ってみましょう。

作り方は、Flow Varialeタブを押して、変数を作りたい要素に作りたい変数名を入力すればOKです。

f:id:makkynm:20200516135307p:plain

Configure Flow Variableタブ

 

作り方4 - 変数を作るNodeから作る

数あるNodeの中には変数がOutputになっているものがあります。Outputのポートが赤い点になっているものは、Configureで設定した値が変数になって出力されます。

例えば、Date&Timeに関する変数を作成するNodeの”Date&Time Conifiguration”です。このNodeを実行すると今日の日付が変数として取得できます。今日という箱に実際の日付の値を入れていくイメージですね。実際の使い方はあとから詳しく解説します。

また、Table Row to Variableは良く使います。KNIMEは変数を処理するNodeよりもテーブルの値を処理するNodeが多いですからね。このNodeはTableの1行目の値を変数に変換するNodeです。

f:id:makkynm:20200516140404p:plain

変数を作るNode例

 

KNIMEでの変数の確認方法

変数の確認方法は、通常の確認方法と変わりません。通常の通りExcel ReaderのConfirmを押しましょう。

 通常であれば、Tableを見ると思うのですが今回は変数を確認したいので、Flow Variableのタブをクリックします。すると、Excel Readerで作成した変数やワークフロー設定で作成した変数が確認できるのが分かります。

 

f:id:makkynm:20200516140923p:plain

Confirm - Flow Variable

 

KNIMEでの変数の渡し方

グローバル変数は、設定した時点ですべてのNodeで使用可能なので、ローカル変数の渡し方を説明します。

方法1:黒い線をつなぐ

KNIMEでは、普通の黒い線をつなぐと自動的にTableの値に加えて変数の値も引き渡されます

また、今回のようにExcel Readerで変数を作った場合、その後に接続するすべてのNodeは前の変数を引き継いでいますので、何度もつなぐ必要はありません。

方法2:赤い線をつなぐ

黒い線が繋げない場合、赤い線を使います。例えば今回のような、変数を作るNodeを使う場合、黒い線はないですよね。しかもExcel Sheet AppenderのInput Portは黒い線しか見えません。

でも実は見えていないだけで、どのNodeにもFlow VariableのInputとOutputのPortはあるんです。変数のポートを出したいNodeを右クリックして、"Show Flow Variable Ports"というのを押してみましょう。見えていなかった変数のポートが現れます。

ちなみに見せなくてもつなぐことは可能です。変数のポートあたりに赤い線を持っていけば勝手につながります。

 

f:id:makkynm:20200516141826p:plain

変数ポートを出す

 

KNIMEでの変数の使い方

 さて最後にどう使うかをお話したいと思います。2つ方法があります。

使い方1 - Flow Variableボタンから使う

作り方と非常に似ています。今回は、"Excel Sheet Appender"のFilePathに、Excel Readerで作った変数 "FilePath" を、Sheet名に”Date&Time Configuration”で作った変数 "Today"を指定したいと思います。

ボタンを押して、Use Variableにチェックマークを入れたら現在使用可能な変数がプルダウン形式で選択できます。それぞれ対応する変数名を指定してみましょう。

f:id:makkynm:20200516142539p:plain

変数使い方1- Flow Variable ボタン

使い方2 - Flow Variableタブから使う

もう一つの使い方は、Flow Varialeタブです。対応するConfigureの項目に対して、変数をプルダウンメニューから指定します。ボタンがない場合に使います。

f:id:makkynm:20200516143246p:plain

使い方2 - Flow variable タブ

確認 

きちんと変数が指定できていると、Configureの下あたりに変数でコントロールされていることが明示されます。

f:id:makkynm:20200516142921p:plain

Configure - Flow variable使用確認

 

Date&Time Configurationの使い方

さて、最後に新出Nodeについて解説したいと思います。まずは今日の日付を変数で取得したDate&Time Configuration Nodeです。

Workflow

Outputのポートは変数のみです。

f:id:makkynm:20200516143704p:plain

Date&Time Configuration

Confirm - Before After

実行時の日付を取得できます。実行時の時間も取得することもできます。

f:id:makkynm:20200516143821p:plain

Confirm - Date&Time Configuration

 

Configure

 ステップは3つあります。

f:id:makkynm:20200516144402p:plain

Configure - Date&Time Configure
Step1 -  Parameter/Variable Name

まず変数名をここで指定します。いわゆる箱の名前ですね。

Step2 -  Type

次にDate&Timeの形式を指定します。今回は日付が必要なので、Dateを指定しました。もちろん取得したい値によって変更してください。時間が必要な場合はTimeですね。

f:id:makkynm:20200516144616p:plain

Date&Time Configuration Type
Step3 - Default Value

最後に発生させる値を選択します。自動的に実行日を取得する場合は、Use Execution Timeにチェックを入れます。

手入力で入力することもできます。ワークフローを検証するときに手動で日付を変更して試したりしてますね。

 

その他の項目について

上の3項目で必要な設定は終了ですが、その他の項目についてもここで解説したいと思います。

Labal / Description

いわゆるメモとして考えておきましょう。

Granularity in Wizard

KNIME Server実行時などに使用するので正直無視していいと思います。Timeの情報の細かさを指定できます。

Earliest / Latest

チェックを入れると、日付の範囲を指定できます。Defaultの値で取得した値が、この範囲に収まっていないとエラーになります。

 

Excel Sheet Appenderの使い方

Excel Writerでは一つのSheetしか書き出せませんが、このNodeを使うと既存のExcelにSheetを追加できます。もしExcelが存在しない場合は新規作成します。

まだ解説していないですが、ループと組み合わせると非常に力を発揮します。

Workflow

f:id:makkynm:20200516145601p:plain

Workflow - Excel Sheet Appender

Confirm

WriterにConfirmはないので、結果のExcelをお見せします。このように、Sheetが追加されていると思います。

f:id:makkynm:20200516145943p:plain

Confirm - Excel Sheet Appender

Configure

 今回、設定は多めですが基本Excel Writerと同じです。

f:id:makkynm:20200516150927p:plain

Configure - Excel Sheet Appender
Step1 - FilePathの指定

最初にファイルパスを指定します。今回はExcel Readerと同じファイルに書き出すので、Excel Readerで作った変数を指定しています。

Step2 - Sheet 名の指定

次にSheet名を指定します。今回は、Date&Time Configuration作った日付の変数を指定しています。

Step3 - Optionの設定

次に色々なOptionを選択していきます。

Add names and IDs

行名や列名を出力するかどうかの設定です。コラム名は書き出したいので、Add column name headerにチェックを入れました。

 

Formulas

出力した時にExcelを再計算させるかどうかの設定です。盲目的にチェックを入れておきましょう。これ、意外と使うと思います。Excel Sheet Appenderのいいところは、Sheetを上書きできる点です。

KNMIEで作りにくい形式のレポートを自動化したいときに便利です。元データとそれを参照する関数が入った別シートが作成されているフォーマットExcelを作成しておいて、KNIMEはその元データ部分を上書きするという形にすれば、KNIMEで表現できないデータベースの形になっていないレポートの作成を自動化することができます。

 

Layout

Autosize Columnにチェックを入れておきましょう。列の幅を調整した状態で書き出してくれます。

 

Step4 - 出力Column指定

最後に出力したいコラムを選択して終了です。

 

その他の項目

その他の項目については下記の意味があります。

Abort if file does not exist 

チェックを入れると、ファイルが存在していなかった場合、実行エラーになります。入れないと新しくファイルを新規作成します。

Abort if sheet already exist 

シートが存在していた場合、上書きせずにエラーを出します。 

Open file after execution  

実行後に自動的にExcelを開きます。

 

 ちょっと一言

赤い線の別の使い方

KNIMEの変数を引き渡す赤い線ですが、実は実行順指定という使い方もあります。KNIMEは左から右に実行できるところから同時に実行していきます。なので何も指定をしないと、Excel ReaderとDate&Time Configurationは同時に実行されます。

f:id:makkynm:20200516153013p:plain

KNIMEの実行順

ここに、赤い線をつないだら、KNIMEは自動的に実行順を判定して、Excel Readerの実行が完了したあとにDate&Time Configurationを実行することになります。

f:id:makkynm:20200516153251p:plain

KNIMEの実行順指定
実行順指定のメリット

何がいいの?と思った方のためにメリットを1点お伝えします。それは、Reset忘れによる誤動作の防止です。Nodeは信号が緑の時、データを保持しているというお話は以前したと思います。つまり、Resetをしないと日付も更新されません。

 

データソースですから、おそらくExcel ReaderをResetし忘れる人はいないでしょう。しかし、Dateの取得NodeはResetし忘れていたということも起こりうるのではないでしょうか。

これを防止するために、受け取った人は必ず全選択してからResetというお話をしましたが、これも確証がありません。確実にそれを防止するには、Excel Readerの後ろに日付取得のNodeを配置する必要があります。そうすると、Excel Readerをリセットしたら自動的にResetされて、確実に実行日を取得できるようになります。

f:id:makkynm:20200516154024p:plain

実行順指定のメリット

 

デフォルトグローバル変数 "knime.workspace"

 Worklowを作るとデフォルトで勝手に作られるグローバル変数があります。"knime.workspace"というものです。私はよく使用しています。

これは、自動的にKNIMEの作業フォルダである、"Local"の絶対パスを自動的に取得するものです。

 "knime.workspace"があると結局何がいいの?

人にWorkflowを共有するときに、受け取り側がConfigureをイジらなくて済みます。

Browseを使用して、ファイルを指定すると人に共有した時必ず受け取り側はConfigureを直す必要が出てきてしまいます。受け取り側の人がKNIMEについて何も分からない人に、Configureの変え方をいちいち説明するの大変ですよね、、、

変な設定をされて余計に時間取られることだってあるでしょう。

このグローバル変数を使うことで受け取り側のフォルダを勝手に取得できるので、その説明を省くことができるのがうれしい点です!

”Create File Name”というNodeとよく一緒に使います。

 

おわりに

変数を説明すると同時に2つも新しいNodeを出してしまったので解説がかなり長くなってしまいました。内容を詰め込みすぎましたかね。

変数を使えるようになると、作れるWorkflowの幅がかなり広がります。また、人に共有しやすくなります。使っていきながらマスターしていきましょう。ではまた。

 

 

 

 

余談

変数ということで、今回紹介するおススメ映画は、「英国王のスピーチ」です。全くつじつまが合っていませんね。ただお勧めしたかった映画です。

吃音を持っていたジョージ6世が、スピーチ矯正の専門家とともにスピーチができるようになるまでを描いた史実に基づいた映画ですね。

スピーチするだけなんですが、これがなんとめちゃめちゃ感動するんです。吃音を克服するまでの心情がヒシヒシと伝わってきます。おすすめです!

英国王のスピーチ (字幕版)

英国王のスピーチ (字幕版)

  • メディア: Prime Video
 
英国王のスピーチ (吹替版)

英国王のスピーチ (吹替版)

  • メディア: Prime Video
 

 

 

www.youtube.com

 

 

参考リンク