第3回では以下の内容をご説明します。
4-12. 講演会参加者における、内科のみのレポートデータ作成
4-13. 講演会参加者における、泌尿器科のみのレポートデータ作成
1. はじめに
第3回では、実際に弊社で行った製薬会社における講演会(製品プロモーション活動)集計レポートの自動化事例を紹介します。
また、サンプルデータを用いて、実際にデータ取込から加工、可視化、レポート作成の一連の流れをご紹介します。
※今回、OneLakeへのデータ取込はファイルアップロードで行っていますが、データがSalesforceやAWS、Snowflake、Sharepoint等のデータベース・クラウドに格納されている場合でも、OneLakeと接続することが可能なため、必要に応じて自動でデータを抽出することが可能です。
接続が可能なサービスの詳細はこちらをご確認ください。
2. レポートの概要・目的
今回作成するレポートは、製薬会社における講演会(製品プロモーション活動)について、各回の参加者数やアンケートによる満足度、情報提供希望者数・割合等をまとめたレポートです。
使用するサンプルデータは各講演会の参加者・アンケート回答リストとMR活動データの2つになります。
※MRとは、Medical Representative(メディカル・リプレゼンタティブ)の略で、日本語では「医薬情報担当者」を指します。製薬会社などに所属し、医師や薬剤師などの医療関係者に自社の医療用医薬品に関する情報を提供する営業担当者の職種です。
- 参加者リスト・アンケート回答(Event_participants_dmy_v4_utf8_sig.csv)
各講演会の参加者と、アンケートへの回答が記載されたデータです。
列名 |
概要 |
---|---|
YM |
講演会の開催年月 |
Event_Date |
講演会の開催年月日 |
start_time |
講演会の開始時間 |
end_time |
講演会の終了時間 |
Event_ID |
講演会ID(1講演会で一意のコード) |
Event_Name |
講演名 |
Product_Name |
講演会でプロモーションする製品名 |
Dr_code |
医師コード(1医師で一意のコード) |
Dr_name |
医師名 |
Connected_Datetime |
講演会の視聴開始時間 |
Disconnected_Datetime |
講演会の視聴終了時間 |
Viewing_Time |
講演会の視聴時間 |
診療科 |
医師の所属診療科 |
KOL |
Key Opinion Leader(製薬企業の販売促進に影響力を持つ医師などの専門家)フラグ |
Question |
講演会でのアンケート内容 |
Answer |
講演会でのアンケート回答 |
- MR活動データ(Event_MRact_dmy_v3_utf8_sig.csv)
日々のMRの活動記録が一覧化されたデータです。
列名 |
概要 |
---|---|
Dr_code |
医師コード |
活動日_visit |
担当MRが医師へ訪問した日 |
活動日_mail |
担当MRが医師にメールした日 |
※「活動日_visit」と「活動日_mail」はいずれか一方のみ収録
3. OneLakeへのデータ取込
はじめに、2つのサンプルデータをOneLakeのレイクハウスに取込を行います。レイクハウスに取込ことで、Microsoft Fabricの各アーキテクチャで簡単にデータへアクセスすることが可能になります。ここでは、ファイルアップロードにて、レイクハウスにデータを取込んでいきます。
※OneLakeとレイクハウスの関係性については「【第1回】Microsoft Fabricとは」の「2-2-1. OneLake」 をご確認ください。
3-1. ワークスペースの作成
Microsoft Fabricホームにアクセスし「Data Factory」を選択後、「+新しいワークスペース」を選択して、”レポート作成”というワークスペースを作成します。ワークスペースは、メンバーと共同でレイクハス、倉庫、レポートなどのアイテムのコレクションを作成し、タスクフローを開発する場所となります。
※今回、後続処理でData Factoryを使用するため、Data Factoryでワークスペースを作成していますが、他のアーキテクチャ内でワークスペースを作成することも可能です。
3-2. (ちょっと寄り道)タスクフローの作成
タスクフローは作成しなくても後工程には影響しませんが、各作業の役割やフローを可視化し、データの関係性やメンバーへの共有を容易にします。
※この工程はスキップしても問題ありません。
「+タスクの追加」から「データを取得」を選択しタスクを作成します。さらに「+追加(プレビュー)」から「データの準備」「データの可視化」を順番に選択し、「コネクタ」を設定することでタスクフローを作成します。
3-3. レイクハウスの作成
「+新しい項目」から「レイクハウス」を選択し、”WebinarData”というレイクハウスを作成します。
3-4. サンプルデータの取込
「データを取得」から「ファイルのアップロード」を選択し、2つのサンプルデータをファイル形式(非構造化データ)で取込みます。
※文字コードがShift-JIS形式の場合、文字化けを起こす可能性がありますので、ご注意ください。
3-5. テーブル形式に変換
各ファイルのオプションから「テーブルに読み込む」から「新しいテーブル」を選択し、テーブル形式(構造化データ)に変換を行います。
これで、OneLakeのレイクハウスに2つのサンプルデータの取込が完了しました。左タブの「レポート作成」より、「レポート作成」ワークスペースに戻ります。
※2-2.でタスクフローを作成した場合は、「データを取得」タスクの右下クリップマークから、「WebinarData」レイクハウスを割り当てます。
4. Data Factoryを用いたデータ加工
次に、取り込んだ2つのデータをData Factoryのデータフロー(Gen2)を使って加工・集計を行います。データフロー(Gen2)で加工・集計フローを作成することにより、今後データが更新された場合にも同様の加工・集計を自動で行うことが可能です。
また、データフロー(Gen2)は、Power Queryといわれるノーコードツール(基本操作はコードを書かずに行え、複雑・特殊な処理を行う際にはコードを書くこともできるツール)となります。そのため、Excelに似た直感的な操作が行え、必要に応じてコードを書くことで柔軟な対応が可能です。
※データフロー(Gen2)では、M言語が使用可能です。データフロー(Gen2)の詳細は、「【第1回】Microsoft Fabricとは」の「2-2-2-1. データフロー(Gen2)」をご確認ください。
今回作成するデータフローと、最終的なレポート用データ「event_summary_report」は以下の通りです。
- データフローの全体像
全18クエリで構成されます。
- レポート用データ「event_summary_report」
“内科”、”泌尿器科”、”その他”は「診療科」列でフィルターを、それぞれで行ったレコードに対しての結果です。
・アンケート満足者数・率:アンケートで「大変満足」と回答した人数、割合
・アンケート情報提供希望者数・率:アンケートで「情報提供を希望」と回答した人数、割合
・MRフォロー数・実施率:講演会後、一定期間以内にMRがフォローできた人数、割合
4-1. データフローの作成
「+新しい項目」から「データフロー(Gen2)」を選択します。
4-2. OneLakeからデータを取得
「データを取得」からOneLakeにアクセスし、前段で取込んだ2つのサンプルデータをそれぞれ取得します。
4-3. イベント時間の算出
取込んだ「Event_participants_dmy_v4_utf8_sig」から[イベント時間]の算出を行います。
4-3-1. 「区切り記号による分割」でイベント開催日の年月日を抽出します。その後、データ型は自動的に数値型に変換されます。
4-3-2. 「例からの列」の選択範囲からを選択し、列名を”実施日”、1行目に出力させたい”2022-11-08”と入力することで、自動的に関数が生成され、その関数に基づき2行目以降も自動的に値が計算されます。
※1行目で関数が自動的に生成されない場合には、2行目以降も適宜入力することで、パターンを学習し関数が生成されます。
同様に、講演会を開始した年月日時間の[開始時間2]と、終了した年月日時間の[終了時間2]をそれぞれ作成します。
4-3-3. 「カスタム列」を選択し、列名に“イベント時間”と入力しカスタム列の式を記載します。この際、列名の指定は右の一覧から選択または、直接入力を行います。
4-4. 講演会毎の参加医師の確認
参加者リストに参加医師の重複がある可能性を考慮して、グループ化を用いて講演会毎に参加医師の重複削除を行います。
4-4-1. 「event_participants_dmy_v4_utf8_sig」のオプションから「参照」を選択して、新しいクエリ”event_participants_dmy_v4_utf8_sig_Group”を作成します。
4-4-2. 「グループ化」を選択し、[Event_ID][実施日][Dr_code]をキーとして行数のカウントを行います。
4-5. 参加医師とMR活動データによる活動状況の確認
「結合」から新規としてクエリをマージを選択し、[Dr_code]をキーとして内部結合、左反結合をそれぞれ行い2つの新しいクエリ「Inner Join」「LeftAnti 」を作成します。
内部結合した「Inner Join」では、MRが活動した医師が、左反結合した「AntiLeft」では、MRの活動外の医師がそれぞれ含まれます。
4-6. MRによる期限内のフォロー有無の確認
MR活動状況より、講演会後指定期間内に参加医師へフォローしたかを訪問・メール毎にフラグ立てを行います。
4-6-1. 結合した列を展開し、追加した列をすべて表示します。
4-6-2. 「データ型」から、実施日のデータ型を「日付/時刻」に変更します。
4-6-3. 「カスタム列」を選択し、列名に”実施日+20”と記載し、カスタム列の式に以下の関数を記載します。
Date.AddDays([実施日],20)
同様にして、”実施日+15”の列も作成します。
Date.AddDays([実施日],15)
MRは、担当医師が講演会参加後に訪問の場合は20日以内、mailの場合は15日以内に接触できた場合を、「フォロー有」と判断されるため、「実施列+20」「実施列+15」の各列はフォロー有無を確認する際に活用します。
4-6-4. 「カスタム列」を選択し、列名に”MR活動フラグ”と記載し、カスタム列の式に以下の関数を記載します。
if [実施日] < [活動日_visit] and [#"実施日+20"] >= [活動日_visit] and [活動日_visit] <> null then "1"
else if [実施日] < [活動日_mail] and [#"実施日+15"] >= [活動日_mail] and [活動日_mail] <> null then "1"
else "0"
4-6-5. 「グループ化」を選択し、[Event_ID][MR活動フラグ][Dr_code]をキーとして行数のカウントを行います。
4-7. MRの活動外医師のデータ整備
MRが対応していない医師については、[MR活動フラグ]を作成し、全て”0”を代入します。
4-7-1. 「カスタム列」から、列名を”MR活動フラグ”と記載し、カスタム列の式に”0”と記載します。
4-7-2. 「グループ化」を選択し、[Event_ID][MR活動フラグ][Dr_code]をキーとして行数のカウントを行います。
4-8. 集計用マスタデータの作成
MR活動フラグ等の集計用のデータ整備が完了したため、集計用マスタデータの作成を行います。
4-8-1. 「結合」からクエリを新規クエリとして「アペンドする」を選択し、「LeftAnti」「Inner Join」の2つのクエリを縦に結合させ、新しいクエリ「Master_data」を作成します。
4-8-2. 「降順で並び替え」を選択し、[MR活動フラグ]をキーとして並び替えを行います。
4-8-3. 「グループ化」を選択し、[Event_ID][Dr_code]をキーとして、[MR活動フラグ]の最大値を求めます。
4-8-4. 「結合」からクエリのマージを選択し、[Event_ID][Dr_code]をキーとして、内部結合を実施します。
4-8-5. 結合した列を展開し、追加した列をすべて表示します。
4-8-6. 「名前の変更」を選択し、[start_time]を[開始時間]、[end_time]を[終了時間]、[Product_Name]を[製品]にそれぞれ変更します。
4-9. 全体でのMRフォロー数の確認
講演会参加者全員における、MRフォロー数のカウントを行います。
4-9-1. Master_dataのオプションから、「参照」を選択し、新しいクエリ「ALL_MRフォロー数」を作成します。
4-9-2. 「グループ化」を選択し、[Event_ID][MR活動フラグ][Dr_code]をキーとして重複削除を行います。
4-9-3. 「グループ化」を選択し、[Event_ID]をキーとして、新しい列名に”MRフォロー数”と記載して、[MR活動フラグ]の合計値を計算します。
4-10. 全体でのアンケート結果の確認
講演会参加者全員における、アンケート結果の確認を行います。
4-10-1. Master_dataのオプションから、「参照」を選択し、新しいクエリ「ALL_アンケート結果」を作成します。
4-10-2. 「行の削除」から行のフィルター処理を選択し、[Answer]がnullのレコードを削除します。
4-10-3. 「グループ化」を選択し、[Event_ID][Answer]をキーとして、新しい列名”カウント”と記載し、[Dr_code]の個別の値のカウントを行います。
4-10-4. 「列のピボット」を選択し、[カウント]をキーとして行列を転置します。
4-10-5. 「カスタム列」を選択し、新しい列名に”合計”と記載し、以下の関数を記載します。
[不満]+[普通]+[大変満足]+[満足]
4-10-6. 「列の管理」から列の削除を選択し、[希望しない][不満][普通][満足]の列を削除します。
4-10-7. 「名前の変更」を選択し、[希望する]を[アンケート情報提供希望者数]、[大変満足]を[アンケート満足者数]、[合計]を[アンケート回答者数]に変更します。
4-11. 講演会参加者全体のレポートデータの作成
講演会全体における、レポート用のデータを作成します。
4-11-1. Master_dataのオプションから、「参照」を選択し、新しいクエリ「ALL」を作成します。
4-11-2. 「グループ化」を選択し、[Event_ID][実施日][製品][Event_Name][イベント時間][開始時間][終了時間]をキーとして、新しい列名に”参加者数”を記載し、[Dr_code]を個別にカウントします。
4-11-3. 「結合」からクエリのマージを選択し、「ALL_MRフォロー数」の[Event_ID]をキーとして左外部結合を行います。
4-11-4. 結合した列を展開し、追加した列を表示します。
4-11-5. 「結合」からクエリのマージを選択し、「ALL_アンケート結果」の[Event_ID]をキーとして、左外部結合を行います。
4-11-6. 結合した列を展開し、追加した列を表示します。
4-11-7. 「カスタム列」を選択し、新しい列名に”アンケート満足率”と記載し、以下の関数を記載します。
Number.Round(([アンケート満足者数]/[アンケート回答者数]),3)
同様に、[アンケート情報提供希望者率][フォロー実施率]も以下の関数により算出します。
アンケート情報提供希望者率:Number.Round(([アンケート情報提供希望者数]/[アンケート回答者数]),3)
フォロー実施率:Number.Round(([MRフォロー数]/[参加者数]),3)
4-12. 講演会参加者における、内科のみのレポートデータ作成
内科の医師に絞った場合の、レポートデータの作成を行います。
4-12-1. Master_dataのオプションから、「参照」を選択し、新しいクエリ「内科抽出」を作成します。
4-12-2. 「行の削減」から「行のフィルター処理」を選択し、
以降、講演会全体の3-9.~3-11.と同様にMRフォロー数とアンケート結果を加工し、内科データを整形します。
※同様の作業フローを作成する場合には、「複製」を活用すると簡単にコピーができます。
① コピーしたいクエリのオプションから「複製」を選択します。
② 最初の「ソース」を選択し、引用しているクエリを「Master_data」から「内科抽出」に変更します。
4-13. 講演会参加者における、泌尿器科のみのレポートデータ作成
内科の場合と同様にMaster_dataから泌尿器科の医師のみにフィルターをかけ、講演会全体の3-9.~3-11.と同様にMRフォロー数とアンケート結果を加工し、泌尿器科データを整形します。
4-14. 最終レポート用データの作成
「講演会全体」、「内科」、「泌尿器科」の3つのクエリを結合させ、レポート用の最終データを作成します。
4-14-1. ALLの「結合」から新規としてクエリをマージを選択し、「内科」の[Event_ID]をキーとして左外部結合を行います。
同様に、「泌尿器科」も[Event_ID]をキーとして左外部結合を行います。
4-14-2. 結合した列を展開し、追加した列を表示します。
4-14-3. 「カスタム列」を選択し、新しい列名に”アンケート回答率”と記載し、以下の関数を記載します。
[アンケート回答者数] / [参加者数]
同様にして、[その他_アンケート回答者数][その他_満足者数][その他_フォロー数]も以下の関数で作成します。
その他_参加者数:[参加者数]-[内科_参加者数]-[泌尿器科_参加者数]
その他_アンケート満足者数:[アンケート満足者数]-[内科_アンケート満足者数]-[泌尿器科_アンケート満足者数]
その他_アンケート回答者数:[アンケート回答者数]-[内科_アンケート回答者数]-[泌尿器科_アンケート回答者数]
その他_MRフォロー数:[MRフォロー数]-[内科_MRフォロー数]-[泌尿器科_MRフォロー数]
4-14-4. 出力用にデータ整形を行い、レポート用データを作成します。
- 「昇順で並び替え」を選択し、[実施日]の昇順に並び替え
- 「列の管理」から列の削除を選択し、[Event_ID]を削除
- 「列の並び替え」を選択し、決められた順番に列を並び替え
- 「名前の変更」を選択し、[Event_Name]を[イベント名]に変更
4-15. 最終レポート用データのレイクハウスへの同期
データフロー(Gen2)で加工・集計したレポート用データをレイクハウスに格納することで、他のアーキテクチャでもアクセスすることが容易になります。
5. 最後に
第3回では、講演会(製品プロモーション活動)集計レポートの自動化事例における、OneLakeへのデータ取込、Data Factoryでのデータ加工・集計を実際にMicrosoft Fabricを操作してご紹介しました。
第4回では、講演会(製品プロモーション活動)集計レポートの自動化事例の続きとなる、レポート用データからPower BIで可視化を行い、レポート形式にまとめる部分を、実際の手順に沿ってご紹介します。
サンプルデータ お問い合わせ先
サンプルデータをご希望の方は弊社担当営業までお申し付けいただくか、下記までお問い合わせください。
東京エレクトロンデバイス株式会社
クラウドIoTカンパニー エッジクラウドソリューション部
URL: https://esg.teldevice.co.jp/iot/azure/
TEL: 045-443-402
メールアドレス: esg@teldevice.co.jp
※ 件名に「Microsoft Fabric ブログサンプルデータ問い合わせ」とご記入ください。