
この記事は「 パソナX-TECH Advent Calendar 2025 」に参加しています。
Power Automateでの開発を対象としたアルゴリズムクイズの解説編です。
今回の解説に使うものをGitHubで公開しました。
- フロー:語彙の組み合わせ登場回数カウント_20251219153710.zip
- SharePointリスト:(スキーマを含むCSV)語彙リスト.csv
- 解説の経緯
- 解説するフロー
- 概要
- 詳細
- 完了
解説の経緯
今回の投稿は出題編の続きです。
解説するフロー
フロー全体の処理の流れはこちらの通りです。

概要
①SharePointリストからアイテムを全件取得する
まずはSharePointリストに登録されているアイテムを全件取得します。アイテムの取得は「複数の項目の取得」アクションを使います。また、このアクションの出力をベースとして必要な情報だけを後続の工程に過不足なく渡すために選択アクションで情報の取捨選択を行います。

②形容詞と名詞の組み合わせパターンを取得
①の工程で取得した全件アイテムから形容詞と名詞の組み合わせとなるパターンを取得し、かつ、重複は排除します。

③アイテムIDごとの「登場回数」列の値を算出
②で取得した形容詞と名詞のパターンが、全件アイテムのなかでそれぞれ何回登場するかカウントします。

④登場回数をSharePointリストに反映
③で取得した「形容詞と名詞のパターン」のそれぞれの登場回数をSharePointリストの各アイテムに反映します。

詳細
①SharePointリストからアイテムを全件取得する

このステップではSharePointリストからアイテムを全件を取得しています。「複数の項目の取得」アクションでアイテムを取得後に、「選択」アクションを使って後続の処理に必要な項目にデータを絞っています。
「複数の項目の取得:語彙リストの全項目を取得」アクション
SharePointリストからアイテムを全件取得します。

「作成:語彙リストの全項目-Value」アクション
アイテム取得アクションのValuプロパティの値を取得しています。このアクションは前述のアイテム取得アクションの出力からSharePoint列の値だけを取得するために使用します。

「選択:語彙リストの全項目」アクション

"from": "@outputs('作成:語彙リストの全項目-Value')", "select": { "形容詞": "@item()?['Title']", "名詞": "@item()?['Noun']", "形容詞-名詞": "@concat(item()?['Title'],'-',item()?['Noun'])", "ID": "@item()?['ID']" }
ここでのポイントはSharePointリストが持っている列の値をそのままとるだけでなく、「形容詞と名詞の組み合わせ」と「アイテムID」も取得していることです。形容詞と名詞の組み合わせは後述の処理で「形容詞と名詞の組み合わせ」のパターンを取得するために使います。アイテムIDはパターンの登場回数をアイテムに反映するために使います。
このアクションの出力は下図の通りです。

②形容詞と名詞の組み合わせパターンを取得
このステップでは①で取得した全件アイテムから形容詞と名詞の組み合わせとなるパターンを取得します。また、後続の処理で使うためにパターンの重複を排除します。
「選択:形容詞と名詞の組み合わせを取得」アクション

"from": "@body('選択:語彙リストの全項目')", "select": "@item()?['形容詞-名詞']"
出力は下図の通りです。

「作成:重複排除」
形容詞と名詞の組み合わせの重複を排除します。

union(body('選択:形容詞と名詞の組み合わせを取得’),body('選択:形容詞と名詞の組み合わせを取得'))
出力は下図の通りです。

③アイテムIDごとの「登場回数」列の値を算出

「変数を初期化する:IDごとの登場回数」アクション
変数の宣言を行います。この変数はフローの処理内で形容詞と名詞のパターンをカウントするために使用します。

「Apply to each-形容詞と名詞の組み合わせごとに登場回数をカウント」アクション
重複を排除した「形容詞と名詞の組み合わせ」ごとに繰り返し処理を行います。

繰り返し処理内容のアクション
「作成:現在の項目-形容詞と名詞の組み合わせ」アクション
このアイテムで繰り返し処理のカレントアイテムを取得します。「繰り返し処理におけるカレントアイテム」とは、いまその瞬間に処理対象となっている1件分のデータ”のことです。

item()
出力例は下図の通りです。

「アレイのフィルター処理:一致する形容詞-名詞の組み合わせを取得」アクション
この回の繰り返し処理で対象としているパターン(例:おいしい-リンゴ)に該当するアイテムを取得します。

"from": "@body('選択:語彙リストの全項目')", "where": "@equals(item()?['形容詞-名詞'], outputs('作成:現在の項目-形容詞と名詞の組み合わせ'))"
出力例は下図の通りです。

「作成:登場回数」アクション
前述のアクションの結果として取得したアイテムの件数をlength関数を使って取得します。

length(body('アレイのフィルター処理:一致する形容詞-名詞の組み合わせを取得'))
出力例は下図の通りです。

「選択:IDと登場回数」アクション
これはSharePointリストのアイテムを更新する準備です。更新対象のアイテムIDとそのアイテムに書き込む内容である「パターンの登場回数」を配列として作成します。

"from": "@body('アレイのフィルター処理:一致する形容詞-名詞の組み合わせを取得')", "select": { "ID": "@item()?['ID']", "登場回数": "@outputs('作成:登場回数')" }
出力例は下図の通りです。

「作成:配列変数に配列をマージ」アクションと「変数の設定:IDごとの登場回数」アクション
この2つのアクションを使って形容詞と名詞の全パターンにおける、アイテムIDとパターンの登場の回数の変数を作成します。

union(variables('IDごとの登場回数'),body('選択:IDと登場回数'))

"name": "IDごとの登場回数", "value": "@outputs('作成:配列変数に配列をマージ')"
そしてこのステップの最後のアクションとしてこの変数の内容を表示しています。

この「作成:IDごとの登場回数」アクションは変数「IDごとの登場回数」の内容を出力しています。出力は下図の通りです。

④登場回数をSharePointリストに反映
変数「IDごとの登場回数」をインプット情報として繰り返し処理でSharePointリストのそれぞれのアイテムにある「登場回数」列を更新します。

完了
これで「登場回数」の入力ができました。(`・ω・´)シャキーン

今回は以上です。