次の方法で共有


Power BI レポートをファイルにエクスポートする

exportToFile API を使用すると、REST の呼び出しを使用して Power BI レポートをエクスポートできます。 次のファイル形式がサポートされています。

  • .pptx (PowerPoint)
  • .pdf
  • .png
    • .png にエクスポートすると、複数ページのレポートは .zip ファイルに圧縮されます
    • .zip 内の各ファイルは、レポートのページを表します
    • ページ名は、グループ API の [ページの取得 ] または [ ページの取得] の戻り値と同じです

exportToFile API を使用した Power BI レポートのファイルへのエクスポートは、Premium Per User (PPU) ではサポートされていません。

使用例

エクスポート機能は、さまざまな方法で使用できます。 いくつかの例を次に示します。

  • [印刷に送信] ボタン - アプリケーションで、クリックするとエクスポート ジョブをトリガーするボタンを作成します。 ジョブは .pdf または .pptx として閲覧済みのレポートをエクスポートできます。 完了すると、ユーザーはファイルをダウンロードとして受け取ることができます。 ブックマークを使用すると、構成済みのフィルター、スライサー、その他の設定などを含めた特定の状態で、レポートをエクスポートできます。 API は非同期であるため、ファイルが使用可能になるまでに時間がかかることがあります。

  • 電子メールの添付ファイル - 一定の間隔で自動メールを送信し、.pdf レポートを添付します。 このシナリオは、週単位のレポートを役員に自動的に送信する場合に便利です。 詳細については、「Power Automate を使用して Power BI レポートをエクスポートおよび電子メールで送信する」を参照してください。

API を使用する

ライセンス要件

  • エクスポートするレポートは、Premium、Embedded、または Fabric の容量によってサポートされているワークスペースに存在する必要があります。
  • exportToFile API は、Premium Per User (PPU) ではサポートされていません

管理者の設定

API を使用する前に、次の 管理者テナント設定 が有効になっていることを確認します。

  • レポートをPowerPointプレゼンテーションまたは PDF ドキュメントとしてエクスポートする - 既定で有効になっています。
  • レポートをイメージ ファイルとしてエクスポート する - .png にのみ必要であり、既定では無効になっています。

イベントの "レンダリング"

ビジュアルのレンダリングが完了する前にエクスポートが開始されないようにするには 、"Rendering" イベント API を 使用し、レンダリングが完了したときにのみエクスポートを開始します。

ポーリング

API は非同期です。 exportToFile API が呼び出されると、エクスポート ジョブがトリガーされます。 エクスポート ジョブをトリガーした後、 ポーリング を使用して、完了するまでジョブを追跡します。

ポーリングの間、API からは完了した作業量を表す数値が返されます。 各エクスポート ジョブの作業は、ジョブ内のエクスポートの合計に基づいて計算されます。 1 つのエクスポートには、1 つのビジュアル、またはブックマークありまたはなしのページのエクスポートが含まれます。 すべてのエクスポートに同じ重みが設定されます。 たとえば、エクスポート ジョブに 10 ページのレポートのエクスポートが含まれていて、ポーリングから 70 が返された場合は、API によりエクスポート ジョブで 10 ページのうち 7 ページが処理されたことを意味します。

エクスポートが完了すると、ポーリング API 呼び出しは、ファイルを取得するための Power BI URL を 返します。 その URL は 24 時間有効です。

サポートされている機能

このセクションでは、サポートされている次の機能の使用方法について説明します。

印刷するページの選択

[ページの取得] または [グループ内の ページの取得 ] の戻り値に従って、印刷 するページを 指定します。 エクスポートするページの順序を指定することもできます。

ページまたは 1 つのビジュアルのエクスポート

エクスポートするページまたは 1 つのビジュアルを指定できます。 ページは、ブックマークがある状態でもない状態でもエクスポートできます。

エクスポートの種類に応じて、 ExportReportPage オブジェクトに異なる属性を渡す必要があります。 次の表では、各エクスポート ジョブに必要な属性を示します。

1 つのビジュアルのエクスポートの場合、ページ (ブックマークありまたはなし) のエクスポートと同じ重みがあります。 つまり、システムの計算においては、両方の操作で同じ値が使用されます。

属性 ページ 1 つのビジュアル 説明
bookmark オプション 適用されません。 特定の状態のページをエクスポートするために使用します
pageName 適用対象。 適用対象。 GetPages REST API または getPages クライアント API を使用します。
visualName 適用されません。 適用対象。 ビジュアルの名前を取得するには、2 つの方法があります。
  • getVisuals クライアント API を使用します。
  • visualClicked イベントをリッスンしてログに記録します。これは、ビジュアルが選択されたときにトリガーされます。 詳細については、「イベントを処理する方法」を参照してください。
  • .

    ブックマーク

    ブックマークを 使用すると、適用されたフィルターやレポートのビジュアルの状態など、特定の構成でレポートを保存できます。 exportToFile API を使用すると、次の 2 つの方法でレポートのブックマークをプログラムでエクスポートできます。

    • 既存のブックマークをエクスポートする

      既存のレポート ブックマークをエクスポートするには、ブックマーク JavaScript API を使用して取得できる一意の (大文字と小文字を区別する) 識別子である name プロパティを使用します。

    • レポートの状態をエクスポートする

      レポートの現在の状態をエクスポートするには、state プロパティを使用します。 たとえば、ブックマークの bookmarksManager.capture メソッドを使用すると、特定のユーザーがレポートに対して行った変更をキャプチャし、capturedBookmark.state を使用して現在の状態でそれをエクスポートできます。

    個人用ブックマーク永続的なフィルター はサポートされていません。

    フィルター

    PowerBIReportExportConfigurationreportLevelFiltersを使用すると、フィルター処理された条件でレポートをエクスポートできます。

    フィルター処理されたレポートをエクスポートするには、フィルターとして使用する URL クエリ文字列パラメーターExportFilter に挿入します。 文字列を入力する場合は、URL クエリ パラメーターの ?filter= 部分を削除する必要があります。

    この表には、ExportFilter に渡すことができる文字列の構文の例が含まれます。

    Assert 構文
    フィールド内の値 <テーブル>/<フィールド> eq '<値>' Store/Territory が 'NC' と等しい
    フィールド内の複数の値 <テーブル>/<フィールド> in ('<値 1>', '<値 2>') 店舗/地域が('NC'、'TN')内にある場合
    あるフィールド内の個別の値と、別のフィールド内の異なる個別の値 <テーブル>/<フィールド 1> eq '<値 1>' and <テーブル>/<フィールド 2> eq '<値 2>' 店舗/地域が 'NC' に等しく、店舗/チェーンが 'Fashions Direct' に等しい

    認証

    ユーザー (またはマスター ユーザー) または サービス プリンシパルを使用して認証できます。

    行レベル セキュリティ (RLS)

    行レベル セキュリティ (RLS) を使用すると、特定のユーザーにのみ表示されるデータを示すレポートをエクスポートできます。 たとえば、リージョンのロールで定義されている売上レポートをエクスポートする場合は、特定のリージョンのみが表示されるように、プログラムでレポートをフィルター処理できます。

    RLS を使用してエクスポートするには、次のアクセス許可を持っている必要があります。

    • レポートが接続されているセマンティック モデルの書き込みアクセス許可
    • レポートが存在するワークスペースの共同作成者または管理者

    データ保護

    .pdf 形式と .pptx 形式では秘密度ラベルがサポートされます。 秘密度ラベルが設定されたレポートを .pdf または .pptx にエクスポートすると、エクスポートされたファイルでは、レポートとその機密ラベルが表示されます。

    秘密度ラベルを持つレポートは、 サービス プリンシパルを使用して .pdf または .pptx にエクスポートすることはできません。

    ローカライズ

    exportToFile API を使用すると、目的のロケールを渡すことができます。 ローカライズの設定は、選択したローカルに応じた書式設定の変更など、レポートの表示方法に影響します。

    動的バインディング

    既定のセマンティック モデル以外のセマンティック モデルに接続された状態のレポートをエクスポートするには、API を呼び出すときに、必要なデータセット ID を datasetToBind パラメーターに指定します。 動的バインディングの詳細を参照してください

    同時要求数

    exportToFile API でサポートされている同時実行要求の数には制限があります。 サポートされている同時実行要求の最大数は、容量あたり 500 です。 制限を超えて、"要求が多すぎます (429)" のエラーが発生するのを回避するには、時間をかけて負荷を分散するか、容量の負荷を分散してください。 同時に処理されるレポートのページ数は、5 ページだけです。 たとえば、50 ページを含むレポートをエクスポートする場合、エクスポート ジョブは 10 個の連続した間隔で処理されます。 エクスポート ジョブを最適化する場合は、いくつかのジョブを並行して実行することをお勧めします。

    コード例

    エクスポート ジョブを作成するときは、次の 4 つのステップに従って行います。

    1. エクスポート要求の送信
    2. ポーリング
    3. ファイルの取得
    4. ファイル ストリームの使用

    ここでは、各ステップの例を示します。

    ステップ 1 - エクスポート要求を送信する

    最初のステップでは、エクスポート要求を送信します。 この例では、特定のページに対するエクスポート要求が送信されます。

    private async Task<string> PostExportRequest(
        Guid reportId,
        Guid groupId,
        FileFormat format,
        IList<string> pageNames = null, /* Get the page names from the GetPages REST API */
        string urlFilter = null)
    {
        var powerBIReportExportConfiguration = new PowerBIReportExportConfiguration
        {
            Settings = new ExportReportSettings
            {
                Locale = "en-us",
            },
            // Note that page names differ from the page display names
            // To get the page names use the GetPages REST API
            Pages = pageNames?.Select(pn => new ExportReportPage(Name = pn)).ToList(),
            // ReportLevelFilters collection needs to be instantiated explicitly
            ReportLevelFilters = !string.IsNullOrEmpty(urlFilter) ? new List<ExportFilter>() { new ExportFilter(urlFilter) } : null,
    
        };
    
        var exportRequest = new ExportReportRequest
        {
            Format = format,
            PowerBIReportConfiguration = powerBIReportExportConfiguration,
        };
    
        // The 'Client' object is an instance of the Power BI .NET SDK
        var export = await Client.Reports.ExportToFileInGroupAsync(groupId, reportId, exportRequest);
    
        // Save the export ID, you'll need it for polling and getting the exported file
        return export.Id;
    }
    

    ステップ 2 - ポーリングを行う

    エクスポート要求を送信した後、ポーリングを使用して、待機しているエクスポート ファイルの準備ができたことを確認します。

    private async Task<HttpOperationResponse<Export>> PollExportRequest(
        Guid reportId,
        Guid groupId,
        string exportId /* Get from the PostExportRequest response */,
        int timeOutInMinutes,
        CancellationToken token)
    {
        HttpOperationResponse<Export> httpMessage = null;
        Export exportStatus = null;
        DateTime startTime = DateTime.UtcNow;
        const int c_secToMillisec = 1000;
        do
        {
            if (DateTime.UtcNow.Subtract(startTime).TotalMinutes > timeOutInMinutes || token.IsCancellationRequested)
            {
                // Error handling for timeout and cancellations 
                return null;
            }
    
            // The 'Client' object is an instance of the Power BI .NET SDK
            httpMessage = await Client.Reports.GetExportToFileStatusInGroupWithHttpMessagesAsync(groupId, reportId, exportId);
            exportStatus = httpMessage.Body;
    
            // You can track the export progress using the PercentComplete that's part of the response
            SomeTextBox.Text = string.Format("{0} (Percent Complete : {1}%)", exportStatus.Status.ToString(), exportStatus.PercentComplete);
            if (exportStatus.Status == ExportState.Running || exportStatus.Status == ExportState.NotStarted)
            {
                // The recommended waiting time between polling requests can be found in the RetryAfter header
                // Note that this header is not always populated
                var retryAfter = httpMessage.Response.Headers.RetryAfter;
                var retryAfterInSec = retryAfter.Delta.Value.Seconds;
                await Task.Delay(retryAfterInSec * c_secToMillisec);
            }
        }
        // While not in a terminal state, keep polling
        while (exportStatus.Status != ExportState.Succeeded && exportStatus.Status != ExportState.Failed);
    
        return httpMessage;
    }
    

    ステップ 3 - ファイルを取得する

    ポーリングから URL が返されたら、次の例を使用して受信したファイルを取得します。

    private async Task<ExportedFile> GetExportedFile(
        Guid reportId,
        Guid groupId,
        Export export /* Get from the PollExportRequest response */)
    {
        if (export.Status == ExportState.Succeeded)
        {
            // The 'Client' object is an instance of the Power BI .NET SDK
            var fileStream = await Client.Reports.GetFileOfExportToFileAsync(groupId, reportId, export.Id);
            return new ExportedFile
            {
                FileStream = fileStream,
                FileSuffix = export.ResourceFileExtension,
            };
        }
        return null;
    }
    
    public class ExportedFile
    {
        public Stream FileStream;
        public string FileSuffix;
    }
    

    ステップ 4 - ファイル ストリームの使用

    ファイル ストリームがある場合は、ご自身のニーズに最も合った方法で処理できます。 たとえば、メールで送信したり、エクスポートされたレポートをダウンロードするために使用したりできます。

    エンド ツー エンドの例

    これは、レポートのエクスポートに関するエンド ツー エンドの例です。 この例には次のステージが含まれます。

    1. エクスポート要求の送信
    2. ポーリング
    3. ファイルの取得
    private async Task<ExportedFile> ExportPowerBIReport(
    	Guid reportId,
    	Guid groupId,
    	FileFormat format,
    	int pollingtimeOutInMinutes,
    	CancellationToken token,
    	IList<string> pageNames = null,  /* Get the page names from the GetPages REST API */
        string urlFilter = null)
    {
    	const int c_maxNumberOfRetries = 3; /* Can be set to any desired number */
    	const int c_secToMillisec = 1000;
    	try
    	{
    		Export export = null;
    		int retryAttempt = 1;
    		do
    		{
    			var exportId = await PostExportRequest(reportId, groupId, format, pageNames, urlFilter);
    			var httpMessage = await PollExportRequest(reportId, groupId, exportId, pollingtimeOutInMinutes, token);
    			export = httpMessage.Body;
    			if (export == null)
    			{
    				// Error, failure in exporting the report
    				return null;
    			}
    			if (export.Status == ExportState.Failed)
    			{
    				// Some failure cases indicate that the system is currently busy. The entire export operation can be retried after a certain delay
    				// In such cases the recommended waiting time before retrying the entire export operation can be found in the RetryAfter header
    				var retryAfter = httpMessage.Response.Headers.RetryAfter;
    				if(retryAfter == null)
    				{
    				    // Failed state with no RetryAfter header indicates that the export failed permanently
    				    return null;
                    }
    
                    var retryAfterInSec = retryAfter.Delta.Value.Seconds;
                    await Task.Delay(retryAfterInSec * c_secToMillisec);
                }
            }
            while (export.Status != ExportState.Succeeded && retryAttempt++ < c_maxNumberOfRetries);
    
            if (export.Status != ExportState.Succeeded)
            {
                // Error, failure in exporting the report
                return null;
            }
    
            var exportedFile = await GetExportedFile(reportId, groupId, export);
    
            // Now you have the exported file stream ready to be used according to your specific needs
            // For example, saving the file can be done as follows:
            /*
                var pathOnDisk = @"C:\temp\" + export.ReportName + exportedFile.FileSuffix;
    
                using (var fileStream = File.Create(pathOnDisk))
                {
                    exportedFile.FileStream.CopyTo(fileStream);
                }
            */
    
            return exportedFile;
        }
        catch
        {
            // Error handling
            throw;
        }
    }
    

    考慮事項と制限事項

    • エクスポート API 操作の負荷は、 Premium 容量負荷の評価で説明されているように、実行時間の遅いバックグラウンド操作として評価されます。
    • エクスポートするレポート内のすべての関連セマンティック モデルは、Direct Query 接続を持つセマンティック モデルを含め、Fabric、Premium、または Embedded の容量に存在する必要があります。
    • エクスポートされたレポートのファイル サイズは 250 MB を超えてはなりません。
    • .png にエクスポートする場合、秘密度ラベルはサポートされません。
    • エクスポートされた 1 つのレポートに含めることができるエクスポートの数 (1 つの視覚化またはレポート ページ) は、50 個です (改ページ対応レポートのエクスポートは含まれません)。 要求に含まれるエクスポートがそれより多い場合、API はエラーを返し、エクスポート ジョブは取り消されます。
    • Power BI レポートをファイルにエクスポートする場合、個人用ブックマーク永続的なフィルターはサポートされていません。
    • ブックマークまたはレポート レベル フィルターなしで exportToFile API を使用すると、レポートは既定値でエクスポートされます。
    • シングル サインオン (SSO) が有効な外部データ ソースが 1 つ以上ある 1 つ以上の複合セマンティック モデルに接続されている Power BI レポートのエクスポートはサポートされていません。 エクスポート時に、ビジュアルが正しくレンダリングされないことがあります。
    • REST API を使用してexportToFile動的バインドを使用してレポートをエクスポートする場合、動的にバインドされたセマンティック モデルを SQL Server Analysis Services (SSAS) に直接クエリを実行して複合モデルにすることはできません。
    • ここで示す Power BI のビジュアルはサポートされていません。 これらのビジュアルを含むレポートをエクスポートすると、これらのビジュアルが含まれるレポートの部分はレンダリングされず、エラー記号が表示されます。
      • 認定されていない Power BI カスタム ビジュアル
      • R ビジュアル
      • PowerApps
      • Python のビジュアル
      • パワーオートメート
      • 改ページ対応レポートの視覚化
      • Visio
      • ArcGIS ビジュアル

    顧客向けおよび自分の組織向けのコンテンツを埋め込む方法を確認します。

    他にわからないことがある場合は、 Power BI コミュニティを試す