デジタル推進課

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

KNIME - ピボットをもとに戻す 列から行へ ~Unpivoting~

f:id:makkynm:20201219200011p:plain

 

 

はじめに

今回は、前回行ったピボットのデータを元通りにしたいと思います!つまり列から行に変換する作業ですね。

何の意味が?と思う人もいるかもしれません。私の感覚では、Pivotingよりも実は使ってるのでは?と感じています。

今までの経験でお気づきかもしれませんが、KNIMEは各実行ごとにConfigureを変えないことで自動化できます。つまり、Inputファイルの内容が変わっても、ファイル名やコラム名を変化させないのが非常に重要です。もしくはコラム名が変わってもConfigureを変えずに処理できるのが重要です。

たまにInputファイルがマトリックスの形になっているために、週単位の日付データが列として組み込まれていることがあります。これを処理するときに毎回実行時にConfigureを変更するのは本当に面倒ですよね?

今回はそんなデータでも自動的に変換できるようにするために重要なNodeとして紹介したいと思います。

 

 今回のテーマ ~Unpivoting~

ピボットされたデータをもとに戻していきましょう。

f:id:makkynm:20200505154044p:plain

Unpivoting

 

覚えてほしいこと

コラム名が変わらないものにEnforce

 

やりたいこと

やりたいことは、前回行ったPivot形式になっているデータをもとに戻すことですね。

f:id:makkynm:20200505154832p:plain

やりたいこと - ピボットを解除



Unpivotingの使い方

Workflow

f:id:makkynm:20200505154044p:plain

Workflow - Unpivoting

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

kni.me

Confirm - Before After

先に結果からです。元に戻っていますよね!コラムの名前は違うNodeで直せるので、今は気にしないでください!

新しく、RowIDsというコラムも追加されています。これはInputのテーブルでのRowIDを示していますので、想定通りにUnpivotingされているかどうかの検証用に使えます。

f:id:makkynm:20200505203027p:plain

Confirm - Before After - Unpivoting

Configure

Configureはかなりシンプルです。2ステップです。

f:id:makkynm:20200505203304p:plain

Unpivoting Configure - Step1, 2
Step1 - Value Columns

まずは値のコラム、つまり列を行に戻したいコラムを選びます。

選ばれたコラムがColumn Namesの種類の数になります。

 

今回は日付のコラムを行に戻したいので、日付のコラムをInclusionにその他をExclusionに入れています。

ここで、下部でEnforceの設定は、コラム名が変わる可能性がない方の、Enforce exclusionを選択しました。

 

Step2 - Retained Columns

次に、処理せずに残しておくコラムを設定します。基本的には、上で設定したコラムと逆になればOKです。Pivotingの設定でいうと、Group settingの部分で指定したコラムと同じです。

また、下部のEnforceの設定は、上と同様にコラム名が変わる可能性がない方の、Enforce inclusionを設定しています。

 

以上で終了です!

 

 ちょっと一言

 [意外と重要] Enforce Inclusion / Exclusionの意味とは?

あまり意識されないのですが、「はじめに」 で触れたように自動化を考える上では「Configureを変えずに処理できるのが重要」です。

その概念から非常に重要な役割を果たす"Enforce Inclusion / Exclusion"について少し解説します。

まず公式サイトのNodePitの説明を見てみましょう。

Enforce Inclusion

Select this option to enforce the current inclusion list to stay the same even if the input table specification changes. If some of the included columns are not available anymore, a warning is displayed. (New columns will automatically be added to the exclusion list.)

Enforce Exclusion

Select this option to enforce the current exclusion list to stay the same even if the input table specification changes. If some of the excluded columns are not available anymore, a warning is displayed. (New columns will automatically be added to the inclusion list.)

引用:Unpivoting — NodePit

・・・英語です。重要な部分は()の部分ですね。

「Enforce Inclusionを選択すると、開発の時に想定されていなかった新しいコラムが検知された場合、exclusion listに自動的に振られる」とあります。

簡単に言うと、

コラム名が変わらないものにEnforce設定しておく

ということです。そうすることで、新しいコラムはEnfoceのついていない方に自動的に振られます。

 

Wildcard/Regrex Selectionでの指定

今回は、Manual Selectionでコラム指定を行いましたが、選択方法はManual Selection 、Wildcard/Regrex Selection 、Type Selectionの3つあります。これはGroupByの回で触れた種類と同じですね。

例えば、値のコラムは日付だけと決まっているWildcardを「2020-*」のように使用して指定する方法もあります。

f:id:makkynm:20200505211751p:plain

Wildcard

私のお勧めは感覚的に分かりやすいManual Selectionですが!(ほかの人へのWorkflowのShareを考えて)

 

おわりに

さて、GWもあと1日になりました。暇すぎると人間だらけてしまうものですね、、皆さんはいかがお過ごしでしょうか。

次回、コラムの名前変更・削除・並び替え をカバーして初級編終わりにしたいと思います!

 

 

参考リンク