データテーブルの特殊な集計(数値ではなく文字列を集約したい)

初めまして。データテーブルの集計について、質問です。
どうしたらいいか全くわからないので、投稿させて頂きます。

Datatable内の複数のKEYを基に数値を集計する方法はわかっているのですが、
文字列の集計(という表現が正しいかはわかりません)は実現可能なのかをご教示頂きたく…。

(例)
▼Datatable1
エリア|大カテゴリ|中カテゴリ|小カテゴリ
東京|生活|消耗品|石鹸
東京|生活|消耗品|洗剤
神奈川|生活|消耗品|洗剤
東京|趣味|PC関連|パソコン
東京|趣味|PC関連|マウス
東京|趣味|雑誌|その他
東京|趣味|裁縫|縫い針

↑このようなデータテーブルがあったとして、
「エリア+大カテゴリ+中カテゴリ」をKEYとし、
「小カテゴリ」の文字列を、以下のような形に集約したいのです。
=KEY単位で、小カテゴリの文字列を「,」区切りで集約したい(カンマでなく、スペースでも記号でも何でもいいです)

▼Datatable2
エリア|大カテゴリ|中カテゴリ|小カテゴリ
東京|生活|消耗品|石鹸,洗剤
神奈川|生活|消耗品|洗剤
東京|趣味|PC関連|パソコン,マウス
東京|趣味|雑誌|その他
神奈川|趣味|裁縫|縫い針

過去トピックも見ましたし、ネットでも散々調べたのですが、全くやり方が見えず。
UiPathの機能をもって、これが実現可能なのかどうか、皆様のお知恵を拝借できたら、と思います。

何卒よろしくお願いします。

dictionary型を駆使するかなぁ…

1 Like

Tupleを使用して、エリア・大カテゴリ・中カテゴリをキー、小カテゴリを値とする形のデータ型を作ってあげればよいかと思います。

とここまで書いて思ったんですが、データテーブルで実装できそうでした。
以下、頭の中で思いついた実装イメージです。

  • 元のデータテーブルをdtとする
  • キー部分についてユニークなデータを洗い出す
    • データテーブルから小カテゴリの列を削除する(これをdt2とする)
    • dt2に、重複排除するアクティビティを適用してユニークにする
  • dt2 に、「小カテゴリ」を保存する列を追加する
  • dt2を各行ループして下記処理を行う
    • dtに対してフィルターする(これをdtFilteredとする)
      • フィルター条件は、”エリア” = row("エリア").toStringのようにして、すべてのキー部分の列をAndで追加
        • 今回の場合は「エリア」「大カテゴリ」「中カテゴリ」の3つ分の条件がAndでつながる
      • これで、dtFilteredは、エリア・大カテゴリ・中カテゴリが一致するデータ(1つ以上)だけになった
    • dtFilteredを各行ループする
      • 各行の「小カテゴリ」のデータを、何かしらの方法で保存しておく
    • 保存しておいた「小カテゴリ」のデータを、dt2の小カテゴリを示す位置に追記する
      • For each row としているなら、row("小カテゴリ") = ~~~ とする
2 Likes

Dictionary、一度頭をよぎりました。
ただ、2度ほどしか使ったことがなく、イチから使い方を学ぶ必要がありそうです。
ありがとうございます!

具体的な対処法、ありがとうございます。
明日、会社で実装できるか試してみます!

1 Like

私はuipathを使い始めて初めてdictionary型の存在を知りました…

何事も経験ですね…頑張りましょう!私は今、StudioXを頑張っていますよ^_^

1 Like

こんにちは

やり方はいろいろありますが、
この要件ならDictionary使って文字列操作で片づけるかなー

以下一例です。

Sample20200622-1.zip (17.2 KB)

#数が多いとStringBuilder使う方が良いかも。

3 Likes

はじめまして!
サンプルまで、ありがとうございます。

え、凄くないですか!?
完璧です!;;

横展開させていただきます!ありがとうございました!

2 Likes

おぉ!よかったですね!横展開もさることながら、内容をしっかりマスタしてまいりましょう!

よろしければ、@yoichiさんの書き込みの解決策にチェックをお願いします。

1 Like