Copilot Studioに記録された日本語の会話をデコードして読めるようにする

## こんな人向けの内容です
Copilot Studioで作成したボットの会話の内容は、Copilot Studio自体の分析タブから確認することはできるのですが、いちいち開くのは面倒。ExcelやPower BIでみられるようにしたいという方向けの記事です。

https://qiita.com/tomoyasasaki1204/items/52229e16c4dcdebca965#copilot-studio%E3%81%AB%E9%96%A2%E9%80%A3%E3%81%99%E3%82%8Bdataverse%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB

こちらの記事に、ボットを作成する環境とロールによってできることがまとめられています。これによれば、ボットを作成はさせることができる「環境作成者」はConversationTranscriptへのアクセス権がない模様。そういう人たちにもPower BIで閲覧させるようなことができる方法はないか、ということで試してみました。
(Power BIならばRLSつかって、特定の行だけを見せるということもできますしね。）

## ConversationTranscriptsテーブル
Copilot Studioで作成したボットの会話は、ボットを作成したPower Platform環境のDataverseのなかの「ConversationTranscripts」テーブルに記録されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/254480e2-e8aa-4079-871b-21a7beea82d4.png)

https://learn.microsoft.com/ja-jp/microsoft-copilot-studio/analytics-transcripts-powerapps

しかし、一見して記録されているはずの日本語の文字列はやたらと「\u」ばかりで読めません。
そこで、Copilotくんに翻訳してもらいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/4fb2fcf0-a200-4979-8f53-4433bc44c53e.png)

さらに、エンコード方式を聞いてみました。4桁の16進数文字列が日本語の1文字ずつを示していることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/08c72bcf-79d0-4a70-b010-96e45b985d14.png)

## Power BI でテキストを抜き出す
Power BI や Excelで利用できるPower Queryは、アクセス権さえあればDataverseのテーブルにアクセスできるため、記録されている文字列へアクセスしてみます。

Power BI Desktopの場合はこちらからアクセスします。　[データを取得]>[Dataverse]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/af9e53f3-33b1-47e0-a485-e4ab71181dd6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/df75aea3-554d-493b-a75c-67c37125980c.png)

## Excel でテキストを抜き出す
Excelの場合はこちらからアクセスします。[データ]>[Power Platformから(W)]>[Dataverseから(A)]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/3b7b2f9a-1544-4436-8346-9dcd1a9ced68.png)

## Contentの中に会話の内容あり
文字列はcontent列の中に含まれています。会話の開始時刻はconversationstarttime列にありますので、そのほかの列は一度削除しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/79441311-de48-4ad3-91b1-2d3df4e1cf3e.png)

[列の追加]から[カスタム列]を選択します。content列の中身はJSONなのでこれを解析していきます。 Json.Document関数にcontent列の中身をほおりこみます。列名はあとで消える列なのでなんでも構いません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/dea08c3b-edca-4b52-bf34-64119a0c4c44.png)

追加されたカスタム列のヘッダー部分にあるレコード展開ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/4f50077c-d7c1-4703-82d3-ce6a74560456.png)

activities列はリストになっていますので、もういちど展開ボタンを押して「新しい行に展開する」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/9cdd5c88-6809-45f3-9d60-e9713d97cbea.png)

展開された中にtextが見当たりませんので「さらに読み...」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/e1236f5d-94ae-4bc2-abc1-3f72414ec6ee.png)

textだけ選択してOKをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/e3513143-ce0b-429a-80a5-84c4a6c18615.png)

これでボットの中身の会話テキストが表示されました。なんと、この段階でエンコードが解除されて日本語が読めました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285141/8a4548ea-7c90-4dfe-9ec5-9afeb33cecad.png)

## JSON関数でデコードまでしてくれるなんて驚き
実はもともとエンコードされているテキストをカスタム関数を作って強引にデコードする方法について記事を書いているつもりだったのですが。JSON関数がデコードまでしてくれることを知って不要になりました。思わぬ収穫でした。