以下の記事で、Power BIのデータをエクスポートするボタンを作成しました!
しかし、この方法では、1000行以上あるデータをエクスポートすることはできません。
今回の記事では1000行以上のデータでもエクスポートできる方法をご紹介します!

では、早速やっていきましょう!
※すでに上記の記事を見ている方は「エクスポートするデータの設定(最難関)」からご覧ください。
通常のエクスポート方法の場合
レポートの閲覧者はグラフ右上の「・・・」から「データのエクスポート」をクリックすると該当のデータをダウンロードできます。

しかし、この方法では1000行までのデータしかエクスポートできません。
これを解決するためにはPower Auotmateと連携する必要があります。
設定には少し知識が必要ですが、わかりやすく解説していきます!
1000行以上のデータをエクスポートする場合
作業の流れは以下のようになります。
DAXクエリという記法を用いてエクスポートするデータの設定をします。
また、Power BI Desktopを利用の方は事前にレポートをクラウドに発行した状態にしてください。
Power Automateを起動する
Power BIからPower Automateを利用するためには、画面右側の「視覚化」の中にあるPower Automateのアイコンをクリックします。

Desktop版から編集する場合には「挿入」タブからも選択できます。

以下の画面がレポートに挿入されればOKです!

次からPower Automateのフローを作成してきます。
フローの編集画面の起動
フローの編集画面にいくには、挿入されたPower Automateの画面右上の「・・・」から「編集」をクリックします。

すると、Power Automateの編集が画面になるので、「Power BIからExcelテーブルを更新する」を選択してください。

表示されたフローのうち、最初のアクション以外を削除したら準備は完了です。
新しいステップをクリックしてフローを追加していきます。

エクスポートするデータの設定(最難関)
この記事で一番難しい手順です。
画像を使いながら丁寧にゆっくり説明していきますね!
まず、「データセットに対してクエリを実行する」を追加してください。

それぞれの項目には以下の情報を入力します。
- ワークスペース ⇒ レポートを発行している場所
- データセット ⇒ 作成したレポートのデータセット
- クエリテキスト ⇒ 取り出すデータを指定するクエリ(これが難しい…)
「クエリ」とは何かを厳密性ガン無視で表現すると「データベースに対してデータを要求すること」です。

今回のデータベースに当たるのはBIレポートのデータセットということになります。
どんなデータが欲しいかをテキストで記述する必要がありますが、このときの記法を「DAXクエリ」といいます。
DAXクエリについては以下の公式ページも参考にしてください。
DAX関数はいきなりゼロから書くのは難しいので、BIレポートから取得する方法をご紹介します。
BIレポートからDAXクエリを取得する
Power BI Desktopでレポートを開き、「表示」タブの「パフォーマンスアナライザー」を選択し、「記録の開始」をクリックします。

次に、「ホーム」タブから「更新」からクリックします。

するとパフォーマンスアナライザーの欄にレポートに表示されているオブジェクト(グラフや図形など)が表示されます。データをエクスポートしたいグラフのオブジェクトを選択し、「クエリのコピー」をクリックします。

コピーしたクエリを先ほどのフローの「クエリのテキスト」にペーストしてみます。

このままだと何が書かれているかさっぱりなので少し解説します。
まず、今回のクエリを4つに分けてみます。

それぞれについて解説します。
- データの項目(列)を定義
- ①のデータの上から501行のみを取り出す
- 最終的に取り出すデータ(テーブル)を指定
- データの順番をソートする
この中の必須項目は③にあるEVALUATEの構文のみですが、その他の部分で詳しい設定や絞り込みを行っています。
まず、①で「SUMMARIZECOLUMNS」という関数を使っていますが、この関数で最初にデータに必要な列を指定してデータのベースを作っています。さらに、これを「_DS0Core」という変数で定義しています。
①によって以下のようなテーブルができているイメージです。

②では①で定義したテーブルを上から501行だけ取り出して「__DS0PrimaryWindowed」という変数にしていますね。
しかし、今回は1000行以上のすべてのデータが欲しいので、この項目は削除します。
③で最終的に取り出すテーブルをEVALUATEで決定します。
ペーストした状態では、501行だけ取り出した「__DS0PrimaryWindowed」になっているので、これを①の「_DS0Core」に変更します。
④はテーブルを氏名でソートしているだけなのでそのままにしておきます。
最終的なクエリテキストは以下のようになりました。

次に「CSV テーブルの作成」のアクションで取得したテーブルをCSVに変換します。

「開始」の欄には動的なコンテンツから「最初のテーブルの行」を選択します。

作成したCSVテーブルをシェアポイント上にCSVファイルとして保存します。
「ファイルの作成」で先ほど作成したCSVをファイルコンテンツに指定してファイルを作成します。

CSVファイルに日本語が混ざっている場合には「decodeUriComponent(‘%EF%BB%BF’)」を挿入しましょう。
詳しく知りたい方は前回の記事を確認してみてくださいね!
作成したファイルを確認してみましょう!

問題なく、1000行以上のデータがエクスポートできていますね!
今回の内容はこれで終了です!最後までご覧いただきありがとございました!