Teamsのチャネル投稿されたメッセージに対するリアクション数を集計する方法をご紹介します。
わりとニーズがある要件のようですね。検索してみたら、たくさん関連キーワードが表示されました。

せっかく組織・チームで反応しているんだから数値化してチャネルパフォーマンス、活性化具合を見たいということでしょうか。
Teams標準の「分析」機能
Teamsの標準機能でもチームやチャネルに対する投稿パフォーマンスを見ることができます。小難しいことをする前に、これで要件がこと足りるならそれで済ますのもよいかと思います。

▲ 任意のチームを選択・右クリックして「チームを管理」をクリックします。

▲ 「分析」タブを押すことで、チーム内の投稿パフォーマンス見ることできます。チャネルや期間でフィルターも可能。
Power Automateを使ったTeams投稿反応の集計処理
フロー仕様の制限
データの出力は、反応単位に行出力したり、メッセージ単位に行出力したりすることができます。私の場合は、後者「メッセージ単位に行出力」させました。
(誰がリアクションしたかなどを調べる反応単位に出力する方法については記事の最後部にリンクがあります)
- Power Automateで取得できるチャネル投稿数は処理開始時より20件(全件は不可)
- いつリアクションされるかはわからない。フロー実行後にリアクションが増えることもある
- メッセージに件名を入れてくれないと投稿概要を把握しづらい
- 返信の反応は拾えない
取得メッセージ20件
チャネル投稿されたメッセージは、全件は取れない仕様でした。
まぁ、これは仕方ないのかなと。
チャネル内にメッセージがとんでもない量あると、フロー実行がいつまでたっても終わらないケースも考えられます。メッセージを取得したら、そこからは最低一つのループ処理が加わるので、ループ処理内で重たい処理をしようものならパフォーマンス問題に発展しかねないということでマイクロソフトさまが制限を加えたのでしょう。
いつリアクションされるかはわからない
フロー実行直前に、投稿したばかりのメッセージがあるとリアクションの取りこぼしが発生します。時間をおいて「いいね」が付くなんてことはよくあるので、一度きりのフロー実行では正しく集計できないと考えました。
上記2つの理由により、フローは定期実行することとしました。
メッセージに件名を入れてくれないと投稿概要を把握しづらい
メッセージ単位で反応を見たいというケースでは、件名が入っている方がベターです。
本文出力も可能ですが、概要が把握しづらいのとメッセージ装飾が施されると本文内がHTML記述され可読性が落ちます。なるべく件名をつける運用に誘導したほうが良いでしょう。
返信の反応は拾えない
元の投稿に返信があった場合で、スレッド上ではそれに対してもいいねほかリアクションをすることはできるわけですが、返信に対する反応までは拾えません。
返信の反応まで含めてしまうとまたループ要素が増えるので、こういった制限があるのでしょうか。
実際の集計処理
Power Automateフローを使ったCSV出力のやり方を記載します。
定期実行という都合、CSVファイルは複数生成されます。また、チャネル内のメッセージ量がそれほどでなければ、当然のことながら重複も発生します。
正しい集計を行うにはさらにひと手間必要となります。

超ざっくり言いますと、CSVファイルを連結して、ピボットテーブルでは各反応の最大値で集計すればOKです。パワークエリとピボットテーブルが使えれば、集計は簡単です。パワークエリを使った複数ファイルの読み込み・連結は過去に記事にしています。
以降は、多少なりともPowerAutomateに触れたことある人向けの書き方をするので、基礎から把握したい人は次のような書籍でトレーニングするのがよいかと思います。
CSV出力イメージ
まずは出力するCSVを設計します。次のような形式で出力することとしました。

メッセージID | 元の投稿に自動付与されるID |
---|---|
メッセージ件名 | 元の投稿に付けられた件名(空欄のケースあり) |
メッセージ日時 | 元の投稿が行われた日時 |
メッセージ投稿者 | 元の投稿をした人の表示名 |
リアクションタイプ | 反応6種類(likeほか) |
個人アカウントの環境につき、反応の少なさはご容赦ください。
フローの全体像
フローは、ループ処理で癖はありますが、全体としてはシンプルです。

チャネル内のまとまったメッセージを取得して、一つ一つを解析、結果をCSVファイルへ出力するフローです。
時間トリガーの設定
定期実行させるので、時間を決めます。チャネルに投稿されるメッセージ数でどの程度の定期処理がふさわしいか判断しましょう。ここでは週次処理としました。

変数の初期化
フロー内で使う変数を定義します。
変数 | 用途 |
---|---|
スカラー(文字列) | ファイル名を格納 |
アレイ(配列) | 投稿に対するリアクションを格納 |

▲ ファイル名には、addHours関数を使い「yyyyMMdd-hhmmss」というように日時を含ませています。
addHours('<timestamp>', <hours>, '<format>'?)
チャネル投稿メッセージの取得
Teamsチームのメッセージを取得します。アクションの設定として、チーム名・チャネル名を指定します。

メッセージ反応のカウント
取得したメッセージ一覧を投稿単位でループ処理させて、反応をカウントします。

このフローでちょっと複雑な部分
1. タイムゾーン変更
取得したメッセージの「投稿日時」は、UTC時間となっていますので日本時間へタイムゾーンを変更します。

2. 反応の絞り込み
Teamsの反応は6種類(いいね+ハート+喜怒哀楽)、それぞれを絞り込んでいきます。

▲ アクショングループ「データ操作」から「アレイのフィルター処理」を選択します。動的コンテンツより「メッセージ反応」を差出人と設定し、そのあとはフィルター処理します。
画像では「reactionType」という動的コンテンツを取得できているように見えていますが、GUI上の操作では取得できません。式を直接入力して取得します。
「reactionType」を取得するために、画像の箇所で次のような式を入れます。
item()?['reactionType']

▲ 取得した直後は、「fx」がついたアイコンとなります。フローを一旦保存すると、Teamsアイコンがついた変数に変わります。
3. メッセージ処理をJSONへ格納
単一のメッセージ処理が終わったら、JSON式へ格納します。アクショングループ「データ操作」から「作成」を選択し、JSON式を記述します。

▲ 上4つの要素は、動的コンテンツからの取得です。
そのあとは、式を手動入力しています。
length(body('アレイのフィルター処理_(like)'))
▲ bodyの引数は、前処理の「アレイのフィルター処理」名称を入れます。
4. メッセージ単位処理をCSV出力用の配列へ格納
これまでメッセージ単位で処理していた結果をフロー冒頭で初期化した配列変数に格納します。「出力」はこの前の処理で自動生成される動的コンテンツです。

CSVテーブル作成
ループを抜けた後は、CSVテーブルを作成ます。

ファイルの作成
これまでの処理が完成したら、ファイルへ結果を出力します。画像では、Sharepointを格納先としていますがOnedriveほか、任意の出力先を選択できます。

▲ 出力させたファイル、ファイル内のメッセージは重複していることがあります。そのままでは正しい反応をカウントしづらいのでファイル結合などが必要となります。
動作確認
フローが出来たら動作確認します。
出力されたCSVファイルは、文字コーディング「UTF-8」となります。エクセルなどで読み込む際は、該当の文字コードを指定する必要があります。

まとめ
Power Automateフローを使ってTeams「いいね」数をCSV出力してみた、というテーマで投稿しました。
あとは出力されたCSVファイルを使って集計処理すればOKです。パワーピボットが使えると楽かと思います。機会あれば、記事投稿します。
Sharepintリストでいいね!や星評価を取る方法↓

