見出し画像

データテーブルの突合(基礎)

この記事は昔、後輩のトレーニング向けに作成した資料を纏めてみたものです。
基礎編も関数編もいずれもプログラミングのバックグラウンドが無い人向けに作成していますので、何かのご参考になればと思います。

さて、データテーブルの突合ですが、よくお目にかかる処理かと思いますが、結構色々な方法がありますので、まずはアクティビティを使った2つの方法をご紹介します。

例えば、下図のような二つのデータテーブルの社員番号を突合して、氏名と役職と年齢を持つデータテーブルCを作りたいとします

データテーブル

画像2

方法①「データテーブルを結合」と「データテーブルをフィルター」の使用

画像3

って、感じですね。データテーブルを結合の結合ウィザードの中身はこんな感じです

画像8

出力データテーブルに空データのdtC(データテーブルC)を設定しましたが、結果をdtA(データテーブルA)かdtB(データテーブルB)に上書きたい場合はdtAかdtBを設定してもいいです。
結合条件はdtAの社員番号列とdtBの社員番号列が一致する列を入力し「=」で結んであげます。

結合型はFullとLeftとInnnerが選べます。
【Inner】
Innerは両方のテーブルに一致する行のみを結合します。

画像8

【Left】
Leftは両方の入力データテーブルに条件が一致する行ががあれば、勿論結合され、両方のデータが保持されます。ただし、入力データテーブル1(例ではデータテーブルA)にのみデータがあった場合、符合しない入力データテーブル2の値は出力に残りません(入力データテーブル1が優先されます

画像6

【Full】
条件に一致する行は結合し、一致しない行は両方のデータを各々保持します

画像5
用途に応じて結合型は選びましょう。
結合の条件に使用する列名が同名の場合、入力データテーブル2の列名に「_1」が付与されます。

結合ができましたら、不要なデータ列やデータ行はデータテーブルフィルターで削除しちゃいましょう!

とっても簡単な突合ですね。
【要注意点】
「データテーブルの結合」アクティビティは行の順序がバラバラになります。
例えば、エクセルへの書き込み時はデータテーブルAの行の並び順にしたい場合、結合前に並び替えように列を挿入し上から採番していきます。結合や後続処理が終わり、書き込みする直前で採番した列を昇順に並び替えてしまいましょう!

画像8

方法② 二重ループを使用した突合データの生成方法

この方法は、コーディングでよく使う方法かもしれません。基礎的なプログラミングの知識がある方は、こちらの方法を使う人が多い印象です。

ですが、個人的には、あまりループや条件分岐を重ねて階層が深くなりロジックが見えにくくなると実装してる本人も混乱しますし、保守する開発者にも負荷かかるので、オススメではない方法です…

ただ、「やっぱり関数とかあまり使いたくないけど、『データテーブルの結合』アクティビティではできない突合条件がある」といった場合はこちらを採用すると思います。

二重ループのレシピ
①データテーブルAに「年齢」という列名の空のデータ列を挿入します
②For Each RowアクティビティにデータテーブルA(dtA)と設定し、分かりやすいように行ループに使用される変数rowをrowAとします。
③②のFor Each Rowアクティビティーの中に、更にFor Each Rowアクティビティを入れデータテーブルBを設定し、ループ変数をrowBとします。
④一番内側のシーケンスに条件分岐を入れ、社員番号を突合させます
⑤④のThen側に rowA("年齢") = rowB("年齢").ToString とした代入アクティビティを置きます
⑥二つのループの外側の最後にデータテーブルのフィルターアクティビティを使用して不要な行や列の条件を設定して削除します

画像9

さて、この手法をメニューに入れて「二重ループとは何」?と研修生からお問い合わせが来ているという方がいらしたので、二重ループの仕組みについては、次の補足記事に記載していこうと思います。

以上!データテーブル突合基礎編でした!

この記事が気に入ったらサポートをしてみませんか?