Excel関数のVLOOKUP関数やXLOOKUP関数をDataflowで実現してみた

Dataverseにデータを投入する手法の一つとしてデータフローがあります。これを用いると、ローカルにあるファイルやAzure BLOB Storageに配置したファイル、SQLデータベースといったデータベース領域に存在するデータをDataverseに投入することができます。

ただ、単に投入するのではなく、特定の条件に合ったデータを投入したい場合もあると思います。Excelに関数で言えば、「VLOOKUP」関数や「XLOOKUP」関数を使用して特定のデータだけを使用する、といった場合です。

本記事では、架空のシナリオを設けて、「データフローで条件に合ったデータをDataverseに投入する」といった内容で紹介しようと思います。

※ 本記事では、基本的なDataflowの構築は割愛します。必要に応じて下記の記事も併せて参照ください。

blog.jbs.co.jp

それでは、本題に入っていきます。

本記事でのシナリオ

今回は、卸売市場で様々な食品を扱う会社を想定します。

会社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です。 体を動かすのが好きで、週末は必ず海に出ています!

担当記事一覧