Dataverseにデータを投入する手法の一つとしてデータフローがあります。これを用いると、ローカルにあるファイルやAzure BLOB Storageに配置したファイル、SQLデータベースといったデータベース領域に存在するデータをDataverseに投入することができます。
ただ、単に投入するのではなく、特定の条件に合ったデータを投入したい場合もあると思います。Excelに関数で言えば、「VLOOKUP」関数や「XLOOKUP」関数を使用して特定のデータだけを使用する、といった場合です。
本記事では、架空のシナリオを設けて、「データフローで条件に合ったデータをDataverseに投入する」といった内容で紹介しようと思います。
※ 本記事では、基本的なDataflowの構築は割愛します。必要に応じて下記の記事も併せて参照ください。
それでは、本題に入っていきます。
本記事でのシナリオ
今回は、卸売市場で様々な食品を扱う会社を想定します。
会社Aでは海外から様々な食品を海外から輸入していますが、食品や生産地(地域)によって単価が異なります。
輸入の際に生じる金額は単価と重量で決まりますが、食品や生産地(地域)によって単価が変わるため、都度目視で確認していると時間がかかってしまいます。
業務としては下記を想定しています。
- 輸入した場合、食品名と生産地、重量を記録して管理者に渡す
- 管理者は記録物を取りまとめ、輸入履歴をExcelに記録する
- データフローを使用して、ExcelからDataverseにデータを投入する
- 食品名と合致する食品単価をもって合計金額を表示する
Dataverseテーブルの事前準備
Dataverse側ではあらかじめ下記2つのテーブルを用意します。
輸入履歴テーブル
下記列を用意しました
- 食品名
- 生産地
- 重量(kg)
- 単価(/kg)
- 合計金額(計算式項目:重量×単価)
食品単価テーブル
下記列を用意しました
- 食品名
- 生産地
- 単価(/kg)
事前データの準備
Excelの準備(輸入履歴テーブル)
輸入履歴テーブルでは、「食品名、生産地、重量」を記録します。
Dataverseの準備(食品単価テーブル)
食品単価テーブルでは、「名前、生産地、1kgあたりの単価」を登録します。
データフローの作成
それではデータフローを作成します。
輸入履歴テーブルの読み取り
今回は、OneDriveに配置したExcelを読み取るので、ソースは「Excel」を選択します。
「OneDriveの参照」を押下し、Excelファイルを指定します。
選択後は画面右下の「次へ」を押下します。
画面遷移後、Excelで作成したテーブルを指定し、「データの変換」を押下します。
食品単価テーブルの読み取り
食品単価テーブルを参照するため、新規クエリを追加します。画面右側で右クリック>「新しいクエリ」>「詳細」をクリックします。
「Dataverse」をデータソースとして選択します。
環境のドメインを入力し、「次へ」を押下します。
食品単価テーブル(スキーマ名)を選択し、「作成」を押下します。
クエリのマージ
双方のテーブルのインポートが完了したら、食品単価テーブルから輸入履歴と合致する単価のみを抽出します。画面右側を右クリック>「クエリのマージ」をクリックします。
遷移した画面では、どのような条件でテーブルをマージするのかを選択できます。
今回は食品単価テーブルと輸入履歴テーブルの「食品名」、および「生産地」に合致したレコードを抽出し輸入履歴テーブルに反映します。
「マージ用の左テーブル」では食品単価テーブルの食品名列(論理名)を選択します。
「マージ用の右テーブル」では輸入履歴テーブルの食品名列を選択します。
2つ目の条件の生産地を指定します。
「マージ用の左テーブル」では食品単価テーブルの生産地列(論理名)を選択します。
(Ctrlを押しながら選択します。)
「マージ用の右テーブル」では輸入履歴テーブルの生産地列を選択します。
(Ctrlを押しながら選択します。)
また今回は、完全に一致している1レコードを抽出するため、「結合の種類」で「内部」を選択し、「OK」をクリックします。
マージが成功すると、下記のような表示になり、条件に合致したレコードが表示されるようになります。(右側の列です。)
表示されたレコード情報から、単価列のみを抽出します。下記画像のとおり、ボタンをクリックして単価列を選択し、「OK」をクリックします。
単価列に格納した値が表示されたことを確認します。
こちらをDataverseの輸入履歴テーブルに投入します。画面右下の「次へ」を押下します。
遷移した画面では、作成したクエリをどのDataverseに移行するのかを選択することができます。今回はマージしたクエリをDataverseの輸入履歴テーブルにデータ投入します。
テーブル1を選択し、読み込みの設定箇所では「読み込まない」を選択します。。
食品単価テーブル(論理名表記)を選択肢、読み込みの設定箇所では「読み込まない」を選択します。
マージを選択し、読み込みの設定箇所では「既存のテーブル」を選択し、宛先テーブル選択箇所では「輸入履歴テーブル(論理名表記)」を選択します。
インポート方法選択箇所では「アペンドする」を選択します。
列マッピング箇所では投入元の列(マージクエリの列)とDataverseの列を指定し、マッピングを指定することができますので、それぞれ選択します。
「公開」ボタン押下直後にデータ投入が開始されます。
※今回はデータ元の量や行数(Excelに記載した量や行数)が少なかったため30秒ほどで完了しましたが、データ投入量によってデータフロー完了までに時間がかかる可能性があります。
データの確認
それでは、今回データ投入した結果を見ていきます。データ投入結果は下記のようになりました。
実際に単価が投入され、合計料金が表示されました。
Excelで実現したVLOOKUP関数やXLOOKUP関数と似たような挙動が、データフローで実現できたことを確認することができました。
まとめ
ローコード製品であるDataflowを用いて、条件に合致したデータの抽出(クエリのマージ)について紹介しました。
Excel関数のVLOOKUP関数やXLOOKUP関数に類似した挙動であることを確認することができました。また、ExcelのVLOOKUP関数等では、検索条件を1つにしなければいけないところ、データフローでは複数の条件を指定することも確認できました。
以上、ExcelのVlookup関数やXlookup関数をDataflowで実現してみました。
Dataverseへのデータ投入方法はDataflow以外にもありますが、Dataflowは特に定期的なデータ投入に特化していると個人的に感じています。1日に何回も同じ手順でデータを作ったり、または週次や月次でデータを作成しないといけないときなど、Dataflowの利用シーンは様々ありますが、反復作業を効率化することができます。
本ブログがDataflowの利用シーンに活用できれば幸いです。
長くなりましたが、ご一読ありがとうございました!
李 兆昊(日本ビジネスシステムズ株式会社)
現在、Microsoft 365の導入を担当しています。主な担当はTeamsとSharePoint Onlineです。 体を動かすのが好きで、週末は必ず海に出ています!
担当記事一覧