オンプレミスの SQL Server Analysis Services (SSAS) でのレポートの埋め込み
適用対象: アプリ所有データ ユーザー所有データ
この記事では、Power BI コンテンツを オンプレミス Analysis Services テーブル モデル ライブ接続で標準の Power BI アプリ所有データ アプリケーションに埋め込む方法について説明します。 この記事は、RLS を実装するかどうかに関係なく、すべてのライブ接続 SSAS モデルに適用されます。
このシナリオでは、SSAS (オンプレミス) モデルのデータベースを使用し、Power BI エンジンからゲートウェイ経由でデータベースに接続します。 セキュリティ ロール (RLS) とアクセス許可 (存在する場合) は、Power BI Desktop では "なく"、SSAS モデルで定義されます。
この記事の対象読者
この記事は主として、既にオンプレミス (SSAS) データベースのセットアップ (RLS ありまたはなし) があり、そこから直接コンテンツを埋め込もうとしている ISV 向けです。
ISV のセットアップ
オンプレミスの行レベル セキュリティはライブ接続でのみ使用できますが、RLS を実装するかどうかに関係なく、任意のデータベースへのライブ接続を作成できます。 これには次のものが含まれます
- RLS ロールが設定されていないデータベース
- メンバーが 1 つ以上のロールに属するデータベース
- 静的または動的なセキュリティ ロールがあるデータベース
SSAS モデルからレポートを埋め込むには、次のアクションを実行する必要があります。
ゲートウェイを設定する
データソース名、データソースの種類、サーバー、データベース、Active Directory で認識されるユーザー名とパスワードを入力します。
ゲートウェイの作成と管理の詳細については、ゲートウェイ データ ソースの追加または削除に関するページを参照してください。
ゲートウェイに対するサービス プリンシパルまたはマスター ユーザーのアクセス許可を付与する
埋め込みトークンを生成するユーザーには、次のいずれかのアクセス許可も必要です。
ゲートウェイ管理者のアクセス許可
データソース借用のアクセス許可 (ReadOverrideEffectiveIdentity)
借用 (オーバーライド) のアクセス許可を持つユーザーには、その名前の横に鍵のアイコンが表示されます。
マスター ユーザー、サービス プリンシパル、またはサービス プリンシパル プロファイルにゲートウェイのアクセス許可を付与するには、次の手順に従います。
次のいずれかの操作を行います。
ユーザー名のマッピング
オンプレミス ディレクトリと Microsoft Entra ディレクトリのユーザー名が異なる場合、ポータルでデータを表示するには、Microsoft Entra ID の各ユーザーまたはロールをオンプレミス データベースのユーザーにマップするユーザー マッピング テーブルを作成する必要があります。 ユーザー名のマッピング手順については、「手動でのユーザー名の再マッピング」を参照してください
詳細については、「Analysis Services データ ソースのユーザー名をマッピングする」を参照してください。
ライブ接続を作成する
環境が設定されたら、Power BI Desktop と SQL サーバーの間に "ライブ接続" を作成し、レポートを作成します。
Power BI Desktop を起動して、 [データの取得] 、 [データベース] の順に選択します。
データ ソース リストから、 [SQL Server Analysis Services データベース] を選択して、 [接続] を選びます。
Analysis Services 表形式インスタンスの詳細を入力して、 [ライブ接続] を選択します。 [OK] を選択します。
埋め込みトークンを生成する
"顧客向け埋め込み" シナリオ用にレポートを埋め込むには、有効な ID を Power BI に渡す埋め込みトークンを生成します。 RLS が実装されていない場合でも、AS エンジンへのすべてのライブ接続には有効な ID が必要です。
RLS が設定されていない場合は、Admin のみがデータベースにアクセスできるため、Admin を有効な ID として使用する必要があります。
埋め込みトークンを生成するために必要な情報は、Power BI にサービス プリンシパルを使用して接続しているか、またはマスター ユーザーとして接続しているかと、データベースに RLS が適用されているかどうかによって異なります。
埋め込みトークンを生成するには、次の情報を指定します。
- ユーザー名 (RLS がない場合は省略可能。RLS には必須) - 有効な ID として使用される、SSAS によって認識される有効なユーザー名。 データベースが RLS を使用せず、ユーザー名が指定されていない場合は、マスター ユーザーの資格情報が使用されます。
- ロール (RLS に必要) - レポートには、有効な ID がロールのメンバーである場合にのみデータが表示されます。
例:
public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
{
PowerBIClient pbiClient = this.GetPowerBIClient();
// Define the user identity and roles. Use one of the following:
var rlsidentity = new EffectiveIdentity( //If no RLS
username: "Domain\\Username", // can also be username@contoso.com
datasets: new List<string>{ datasetId.ToString()}
)
var rlsidentity = new EffectiveIdentity( // If RLS
username: "username@contoso.com",
roles: new List<string>{ "MyRole" },
datasets: new List<string>{ datasetId.ToString()}
)
// Create a request for getting an embed token for the rls identity defined above
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
identities: new List<EffectiveIdentity> { rlsIdentity }
);
// Generate an embed token
var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
return embedToken;
}
これで、レポートをアプリに埋め込むことができます。レポートのデータは、レポートにアクセスするユーザーのアクセス許可に従ってフィルター処理されます。
考慮事項と制限事項
CustomData はサポートされていません。