注: この記事は元々 d-bi.gitee.io で公開されたもので、2023 年 6 月に CSDN に移行される予定です。
この記事では主に、ドキュメント内で明示的に言及されていない手順、発生する可能性のあるバグの解決策、各機能の具体的な実装方法など、Power BI Embedded の開発プロセスにおけるいくつかの重要なポイントについて説明します。
なお、これは補足的な記事であり、「フィードバック」であるため、ステップバイステップのチュートリアルではありません。Power BI Embedded についての予備的な理解がすでにあることをお勧めします。[公式ドキュメント] (https://docs.microsoft.com/en-us/power-bi/developer/embedded/embed-sample-for-customers?tabs=net-framework) に従い、この記事と組み合わせてください。それが役立つと信じています。開発プロセスは誰にとってもよりスムーズになり、寄り道が少なくなります。記事の最後には、より詳細な情報を含む関連チュートリアルへのリンクもあります。
なお、以下の内容はすべて「顧客向けの組み込み(アプリ所有データ)」です。組織向けの組み込み開発であれば、こちらのドキュメントを参照していただけます。ただし、実際の開発プロセスは大きく変わりませんので、この記事も参照してください。
例
まず最初に、この Web サイトにアクセスして公式の例を体験することを強くお勧めします。または、Google で「Power BI Embedded Playground」を直接検索することもできます。このサイトでは、多くの優れた例や教育ドキュメントやビデオが提供されています。
下の図は私が開発した例で、次の機能が含まれています。
- レポートの選択
- データのフィルタリング
- テーマを切り替える
- RLS (ロールベースの行レベルのセキュリティ)
- 編集モードに切り替えてレポートを編集して保存します
- ブックマークを表示して閉じる
- 全画面モードの開始と終了
- ページの更新
- 最新のデータ更新時刻を問い合わせる
- データリフレッシュを実行する
- ダッシュボードに切り替える
- ダッシュボード表示モード
- 詳細 (...)
上記の例は、Power BI の一般ユーザーにとって十分強力ですが、実際には、実現できる機能はこれらよりもはるかに多くなります。この例は単なるプロトタイプであり、同じ技術的な実装に基づいていることを意味します。公式サンプルでポップアップされるメール送信機能を備えたカスタムサブメニューや、カスタムビジュアル分析など、想像をはるかに超えた機能を数多く実現できます。
この例は個人のローカル サーバーに一時的にデプロイされているため、まだアクセスできません。後で各機能の効果を示すビデオが記録されます。
次に、ドキュメントのステップ 1 ~ 8 に従って、以下の概要をお読みください。
準備作業の概要
1.Power BI Embedded は、単純な iframe 埋め込みではありません。PBI サービスでレポートを Web に公開し、HTML ページに iframe を埋め込むこともできますが、アクセス許可を制御したり、提供されている強力な PBI JS ライブラリを使用したりすることはできないため、これは本当の意味での Power BI Embedded ではありません。豊富なインタラクティブ機能などを実現します。これらの効果を実現するには、まず有効な埋め込みトークンを取得する必要があります。これが準備作業の焦点です。
2. テスト段階では、マスター アカウント モード(PPU、プロ、またはプロ試用版アカウント) を選択することをお勧めします。Power BI Embedded にはサービス プリンシパルとマスター アカウントの 2 つの認証モードがあり、後者は正式には運用環境では使用できず、限られた数の埋め込みトークンしか生成できませんが、このアカウントを使用して Power BI サービスにログインできるため、したがって、これにより、開発者が関連するデバッグを実行しやすくなります。サービス プリンシパルは、セキュリティ グループにユーザーとして参加し、PBI ワークスペースでアクセス許可を割り当てることができます (図に示すように、これは必要な手順です)が、サービス自体にログインすることはできません。
アプリケーションがオンラインになったら、認証方法をサービス プリンシパルに変更することをお勧めします。この方法を使用するには、構成ファイル内のアカウントとパスワードの値を増やす必要はありませんが、クライアント シークレットを指定する必要があります。さらに、PBI
サービスでは、テナント設定 (ドキュメントの手順 6) で「サービス プリンシパルに Power BI API の使用を許可する」を有効にした後、セキュリティ グループに適用することをお勧めします。 (セキュリティ グループは Azure の管理者が作成できます):
開発と展開に関する Q&A
1. 埋め込みトークンの取得に失敗しました
エラー メッセージ: 401 Unanthorized: 埋め込み URL の取得中にエラーが発生しました
解決策: Azure ポータルのアプリに Power BI サービスのアクセス許可を追加します
注: 403 Forbidden が返された場合は、アプリのアクセス許可を PBI ワークスペースに追加する必要があります (前述)。
2.'$'が定義されていません
解決策: IE ブラウザを使用せず、新しいバージョンの Chrome、Firefox、または Edge ブラウザに切り替え、HTML に Jquery を導入します。
<script src="/scripts/jquery.js"></script>
3.「/」アプリケーションのサーバーエラー
解決策: パッケージ マネージャーを使用して .net パッケージをインストールします。
Install-Package Microsoft.Net.Compilers -Version 3.7.0-2.final
問題が解決しない場合は、IIS のアプリケーションに変換する必要があります:
4.powerbi が定義されていません
解決策: インストールされている Powerbi.javascript パッケージ内のスクリプト フォルダーをプロジェクトのルート ディレクトリにコピーします。
5. レポートを編集モードに変換すると、エラーが発生します
。
JS
//在Config追加
permissions: models.Permissions.All
ASP.NET
var generateTokenRequestParameters = new GenerateTokenRequest(TokenAccessLevel.View);
への変更:
var generateTokenRequestParameters = new GenerateTokenRequest(TokenAccessLevel.Edit);
遭遇した問題とその解決策 (ある場合) について、読者からのフィードバックをとても楽しみにしています。コンテンツのこの部分を充実させ、より多くの人を助けるために、関連する質問を追加します。
【付録1】具体的な機能の実装方法
Power BI Emdeded Playground の元のコードはやや複雑で理解しにくいため、すべてを理解するのに役立つ 1 つまたは 2 つの例をここに示します。
1.フルスクリーンを実装する
HTML
<button id="r_fullscreen" type="button" onclick="fullscreen()">全屏</button>
JS
function fullscreen() {
var embedContainer = document.getElementById('embedDiv');
report = powerbi.get(embedContainer);
report.fullscreen();
return;
};
2. マウスを移動すると、データセットの最新更新時刻が表示されます。
HTML
<button id="d_refresh" title="
上次刷新开始时间:
<% = this.refresh_startTime %>
上次刷新完成时间:
<% = this.refresh_endTime %>"
type="button" onclick="refresh()">刷新数据</button>
ASP.NET
public string refresh_startTime;
public string refresh_endTime;
using (var client = new PowerBIClient(new Uri(Configurations.ApiUrl), Authentication.GetTokenCredentials()))
{
var report = client.Reports.GetReportInGroup(Configurations.WorkspaceId, new Guid(ddlReport.SelectedValue));
var refresh_history = client.Datasets.GetRefreshHistoryInGroup(Configurations.WorkspaceId,report.DatasetId);
refresh_startTime = refresh_history.Value[0].StartTime.Value.ToString();
refresh_endTime = refresh_history.Value[0].EndTime.Value.ToString();
}
【付録2】関連情報
Power BI Embedded は RLS を実装します
RADACAD Power BI Embedded 記事シリーズ
著者をフォロー: Zhihu | Power BI 公式コミュニティ