デジタル推進課

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

KNIME - GroupByをしたあと元データに戻すには? Listの分解 - Ungroup

 

f:id:makkynm:20210223101109p:plain

 

はじめに

こんにちは、自動化大好きまっきーです。今回は"Ungroup"というNodeを紹介したいと思います。

このNodeは、名前の通り、GroupByを解除するというような使い方に有効です。

実用的には、下のすさんのブログで紹介されているように、縦方向にセル結合されたものを1行ずつにするというような使い方くらいかなと思います。

sumtat.hatenablog.com

 

 

 今回のテーマ ~Ungroup~

f:id:makkynm:20210223091544p:plain

今回のテーマ ~Ungroup~

なお、今回使用するデータは以前GroupByで使用したデータと同じです。もしGroupByってなんだ?と言う方がいらっしゃれば、下記の記事をご覧ください。

degitalization.hatenablog.jp

 

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

hub.knime.com

 

 

覚えてほしいこと

UngroupはListを縦方向に解除する

 

やりたいこと - Ungroup

「GroupByで合計残業時間を算出したあと、GroupBy前のデータ(勤怠表のデータ)に戻す」

ということをやりたいと思います。

GroupByで合計残業時間を算出したあと、GroupByで潰してしまった日付ごとの情報を復活させます。

f:id:makkynm:20210223091402p:plain

やりたいこと - Ungroup

 

 

事前準備

GroupByのConfigure

まずはGroupByのConfigureです。GroupByする際に、List型のデータを作成していることが、Ungroupで元データを復活させるためには必要です。

ListはManual Aggregationのオプションで指定することができます。

f:id:makkynm:20210223094807p:plain

事前準備 - GroupByのConfigure

ちょっと一言でも解説しますが、ここが元データに戻すために必要になるポイントとなります。

 

List(リスト)とは?

List(リスト)とは、データの塊を角かっことカンマで表現したものです。英語では、"Collection"と言ったりもします。

例えば、

「りんご、いちご、みかん」

と言うデータの塊があるとすると、List(リスト)型で表現すると、

[りんご, いちご, みかん]

と言うようなデータの持ち方になります。

KNIMEでは、Listのデータ型は下のような[...]と言うアイコンで表現されます。

f:id:makkynm:20210223095227p:plain

List型のアイコン

また、全てのデータを横に並べると大変なことになってしまうので、3データくらい見せた後は「...」で省略されます。

f:id:makkynm:20210223095445p:plain

List型のデータの表現

 

Ungroupの使い方

このNodeは、Listというデータ型になっているものを縦方向に展開する機能を持っています。

Workflow

Ungroupを使ってGroupByする前のデータ、JoinerのOutputを再現したいと思います。

f:id:makkynm:20210223091544p:plain

workflow - Ungroup

 

Confirm - Before After

出勤日と残業時間のコラムに注目ください。GroupByで一度殺してしまっている、日付単位の情報が、Ungroupにより復活していることがわかると思います。

f:id:makkynm:20210223091402p:plain

Confirm - Ungroup

 

Configure

UngroupのConfigureは非常に単純です。縦方向に分解したいリスト型を選択するだけです。

f:id:makkynm:20210223092705p:plain

Configure - Ungroup

一応Additional Settingsについて解説しておきます。

Remove selected collection column

 選択されたリスト型のコラムを出力から除外する
Skip missing values

 欠損値があった場合スキップするオプションです
Skip empty collections

 もしデータのない空リストだった場合はスキップします。

 ちょっと一言

 Ungroupの注意点

注意点として、決してUngroupがGroupByの元情報を認識しながら元に戻すわけではないということがあげられます。

ちょっとこの表現では分かりにくいかもしれないのですが、UngroupはListを縦方向に分解する能力しか持っていないということです。実験してみましょう。

ListとList(Sorted)の違いについて - GroupBy

実験する前段階として、GroupByの機能でListを作るときに、List(sorted)というオプションがあったと思います。この機能について少しだけ解説します。

これは、Listを作る際にソートをかけておくというオプションです。

例えば、縦方向に

というようなデータがあった場合には、通常のListだと、

[4,3,2,6]

というデータの持ち方になりますが、List(Sorted)のオプションを適用すると、

[2,3,4,6]

というデータの持ち方になります。

今回の例で言うと、残業時間と勤務日をListにしたと思います。これをList(Sorted)をしたものと比べてみましょう。

ソートしたリスト

f:id:makkynm:20210223093427p:plain

GroupBy - List(Sorted)

ソートしないリスト(元データの順番を継承)

f:id:makkynm:20210223093448p:plain

GroupBy - List

 

List(Sorted)を使ってUngroupした場合どうなるか?

さて、このList(Sorted)を使用してListを作った場合の結果をお見せします。

ご覧の通り、元データと異なるデータが作られてしまいました。つまり、UngroupはListを単純に縦方向に分解する機能しか持っていないと言うことです。

f:id:makkynm:20210223093945p:plain

List(Sorted) を使用

 

List型はExcel Writerには対応していない

List型を含んだままそのままExcel に出力しようとしても出力できません。下記のエラーが出ると思います。

ERROR Excel Writer

Execute failed: Unsupported column type 'List'. Please remove corresponding column(s) from the input table.

サポートしてないので、Column FilterとかであらかじめInputからリスト型は抜いておいてね。と言う意味ですね。

f:id:makkynm:20210223100239p:plain

List型は出力できない

おわりに

いかがでしたでしょうか。List型を使うのは少し高度なNodeに出てくることがあります。応用の聞くNodeなのかもしれません。こんなところで使ってます!と言うようなコメントあれば嬉しいですね。

ではまた!

 

一日1回押していただけると大変応援になります↓ 

にほんブログ村 IT技術ブログへ

 

 

 

余談 

またまた楽天モバイルのお話。楽天の三木谷さんが、赤字決算のお話してましたね。

「1141億円」の赤字だと言うことです。そりゃそうですよね、1年間無料で楽天モバイルのプランを拡大しまくってるんですもん。なおかつポイントあげちゃってますし。

契約数が想定以上に多かったみたいです。今の時期に楽天さんがお金くれるって言うんですからありがとうございますって感じで受け取ります。格安SIMとしては、サービスとしてとてもいいと思います。

また不便なところなどレポートしたいと思いますー、ではまた!

楽天モバイル

 

 

参考リンク