PowerBIよもやま話

この記事は 弥生 Advent Calendar 2020 の17日目の記事です。

弥生の川本です。開発本部でQAを担当しています。
皆さん、QAってご存知でしょうか。
一般的には、Quality Assurance=品質保証と呼ばれることが多いですね。 会社によっては品質管理と呼んでいたり、業務内容がテストだけにフォーカスされていたり、定義にバラつきがある印象です。
と言うより、「Quality Management」「Quality Control」「Quality Assurance」がごちゃ混ぜになっているのかな。 特に「Quality Management」「Quality Control」をどちらも日本語で「品質管理」と訳してしまうのが混乱の元のように思います。
弥生のQAがどのような活動をしているかと言うと、「品質監査(Quality Audit)」はもちろん、「プロセス・指標の策定」や「プロセスの啓もう」なども行っています✨
なので一般的な定義に照らし合わせると、「Quality Assurance」+「PMO (Project Management Office)」という定義が近しいのかなと思います。

さて、ここまで書いておきながら、今回のテーマは「QA」ではありません笑
タイトルの通り、今回のテーマはMicrosoftが提供しているBIツールであるPowerBIについて、雑多に書き連ねます。

BIツール(BIシステム、ビジネス・インテリジェンス・ツール、英語: Business Intelligence tools)とは、企業の基幹システムで生成されたデータを、ユーザ自身が抽出・加工するためのアプリケーションソフトウェアである。加工したデータは企業の意思決定に利用される
出典:BIツール - Wikipedia

ノンプログラミングで集計できる!

PowerBIには「コネクタ」と呼ばれる機能が搭載されています。これは文字通り、PowerBIと各種データをコネクト(接続)するための機能です。 これまでExcelファイルでVBAマクロ等を駆使してデータ集計してきた方ならイメージしやすいと思うのですが、Excel集計の何が大変かって、まず集計対象のファイル種別やフォーマットにあわせてカスタマイズすることが大変だったと思うのです。
ファイル種別はTxtだったりCSVだったりXmlだったりExcelだったり様々ですよね。さらに同じファイル種別でもデータ構造が異なっていて、集計対象にあわせてカスタマイズする経験をした方も多いのではないでしょうか。
PowerBIのコネクタは、その悩みを(概ね)解消してくれます👍

今のところ私が主に使っているのは以下の7種類だけですが、基本的にPowerBIのUIに沿ってポチポチするだけでデータを取得することができます。正直めっちゃ楽ちん!

  • Excel
  • CSV
  • Json
  • Odata
  • MySQL データベース
  • フォルダー
  • Web

ちなみに2020年12月現在、PowerBIが対応するコネクタは実に143種類もあります。
Power BI Desktop のデータ ソース - Power BI | Microsoft Docs

プログラミングできるとより捗る!

ノンプログラミングでも使えるとは言え、やっぱり簡単なプログラミングの知識はあった方が良いなと思います。 データの取得自体はお手軽に実現してくれるのですが、欲しいデータ構造で取得できなかったり、大量データの取得に失敗したり等の課題にぶつかり、私も試行錯誤する日々です。

タイムアウトでデータを取得できない!

少し前に私がつまづいた部分についてお話をします。
背景として、弥生はチケット駆動開発のプロセスがあり、チケットのデータを取得しようとしていました。 チケットはWebブラウザからアクセス可能なので、試しにWebのコネクタでチケットのURLを指定したところ難なく取得できました。
しかし該当のプロジェクトの全チケットを取得しようとすると、何回やってもタイムアウト。。。
オプション設定からタイムアウト時間を延長してもタイムアウト。。。

PowerBIの機能だけでは打つ手がなさそうだったので、そもそもチケット件数が多すぎるからWebクエリーではデータ取得できないんだと仮説を立てました。
つまり、1回に取得するデータサイズを減らして複数回に分ければいけるのでは?というExcelマクロ的な発想です。

関数化してぐるぐる回す!

ここからは実際にPowerBIでどういう操作をしたのかをお見せしたいと思います。 品質データは公開できないので、サンプルとして弥生コーポレートブログを読み込む処理を関数化してみました。

①Webコネクタでデータを取得

  • ホームメニューの「データを取得」をクリック f:id:ym_AdventC:20201211162853p:plain:w600
  • 「Web」をクリック f:id:ym_AdventC:20201211163134p:plain:w600
  • 取得対象のURLを指定 f:id:ym_AdventC:20201211163138p:plain:w600
  • 取得したいデータ構造のテーブルを選択 f:id:ym_AdventC:20201211163141p:plain:w600

    ②webコネクタで自動生成された処理に、「PageNo」の引数を追加して関数化(詳細エディターを直接編集)

  • ホームメニューの「データの変換」をクリック f:id:ym_AdventC:20201211163818p:plain:w600
  • 詳細エディターから直接編集 f:id:ym_AdventC:20201211163821p:plain:w600
  • 以下の内容を追記 f:id:ym_AdventC:20201211163824p:plain:w600

    ③引数PageNoとして1~30までのリストを渡して、ブログの1ページ目から順番に読込

  • 列の追加メニューの「カスタム関数の呼び出し」をクリック f:id:ym_AdventC:20201211164815p:plain:w600
  • ②の関数を指定し、引数PageNoとして1~30の数字が入力された列を指定 f:id:ym_AdventC:20201211164819p:plain:w600
  • カスタム関数のテーブルを展開 f:id:ym_AdventC:20201211164831p:plain:w600
  • 全データの取得が完了 f:id:ym_AdventC:20201211164834p:plain:w600

いかがでしょうか?関数化と書きましたが、ただ引数を追加するだけで実現します笑
あと、重要なポイントがもう一つあります。

Web.Contents("URL", [RelativePath=""])

この記述です。今回実現したのは「動的データソース」と呼ばれる仕組みです。動的データソースには厄介な以下の制約があるのですが、この記述であれば制約に引っ掛からずに更新スケジュール機能(自動更新機能)を使用することが可能です。

ほとんどの場合、動的データ ソースを使用する Power BI データセットを Power BI サービスで更新することはできません。
Power BI でのデータの更新 - Power BI | Microsoft Docs

実のところ一番つまづいたのはこの部分で、単純に関数化しただけだと自動更新が使用できなくなるので悩まされました😅 この内容が同じような課題で困っている方の参考になれば幸いです。

これからのPowerBIとExcel

つい先日、Microsoftのブログに以下の記事が投稿されました。 www.microsoft.com

要約すると、PowerBIとExcelの連携を更に強化していくとのこと。Excel⇒PowerBIの一方通行の連携から、今後はExcel⇔PowerBIの双方向の連携がしやすくなるということかと思います。 PowerBIはデータの取得、可視化という点では非常に使い勝手が良いのですが、分析という点だとやはりExcelの柔軟性に一日の長があるということでしょう。

弥生もPowerBIの導入を最近始めたばかりで、今はまだ既存のものを置き換えるために試行錯誤している段階です。将来的にはもっとたくさんのデータを集約して、それらのデータ活用から新しい価値を提供できたら良いなと思います。私個人としてもこれからのアップデートがとても楽しみです!