本記事の目的
2つのDBテーブル間でのデータ比較を行いたいが、比較対象のテーブルはそれぞれ異なるデータベース上にある。手間をかけずにささっと簡単な比較をするには、どうしたらよいか。
■ 使いたいデータソース
- Oracle Server (オンプレ)
- SQL Database (Azure)
いつもは「Object Browser for Oracle」と「SQL Server Management Studio」を使い分けてそれぞれのDBにアクセスしていることもあり、DBを横断して比較するとなったときに、ふと手が止まった。
何か楽にできる方法がないかと考えたら、Power BIで簡単にできることに気が付いた。
Power BIを「データコラボレーションツール」と捉えられている人にとっては当たり前だが、「データ可視化ツール」と認識していると案外こういう発想が出てこなかったりする。
アプローチ
<手順>
Power BIを利用したことがある人であれば、特に迷うことはない。
- Oracle Databaseコネクタを使ってOracleのデータを取得
- SQL Serverデータベース コネクタを使ってSQL Databaseのデータを取得
- PowerQueryなりDAXなりで自由に分析
1. Oracle Databaseコネクタを使ってOracleのデータを取得
Power BIでは様々なデータソースに対するコネクタが用意されているため、それを使えば画面操作で簡単にデータをかき集めてくることができる。ちなみに対象へのコネクタをMicrosoftが提供していない場合でも、サードパーティのコネクタを使えば接続できることもある。
Oracleの場合も、接続先の情報を入れて認証情報を入れるだけでつながる。
2. SQL Serverデータベース コネクタを使ってSQL Databaseのデータを取得
3. PowerQueryなりDAXなりで自由に分析
両方のデータを取り込んだら、あとはPower BI側の機能で分析すればよい。JOINやUNIONなど多くのことはPowerQueryでもDAXでも実現できる。PowerQueryなら画面上のマウスクリック操作だけですぐ実現できるので、データ取り込み時にPowerQuery上でやってしまえば良い。
以下はPowerQueryでのJOINとUNIONの操作。データの取り込み時に「データの変換」を選ぶとPowerQueryの画面になる。
JOIN
「クエリのマージ」という機能を使えば良い。どのテーブルでリレーションを貼るかを選択して、結合の種類を選択する。
ちなみに過去の記事で書いたが、Power BIでは複合キーによるリレーションは使えないので、必要ならマージした列を作るなどしておく。
UNION
「クエリの追加」という機能を使う。どのテーブルをUNOINしたいかを選択するだけ。
DAX関数を使えば、他にも細かいことが色々とできる。例えばEXCEPTを使えば、あるテーブルの中でもう1つのテーブルに出現しない行だけ持つ差分テーブルが作れるので便利。
まとめ
「Power BI = データの可視化ツール」という考えに囚われると頭が固くなる。Power BIはデータをかき集めてきてあれこれする「データコラボレーションツール」と考えたほうが良さそう。豊富に用意されているコネクタ機能を使えば、比較的簡単にいろいろ実現できて面白い。