Automatizar tarefas de modelo semântico e workspace Premium com entidades de serviço
As entidades de serviço são um recurso de registro de aplicativo do Microsoft Entra ID que você cria em seu locatário para executar operações de nível de serviço e recursos autônomos. Eles são um tipo exclusivo de identidade do usuário com um nome do aplicativo, uma ID de aplicativo, uma ID do locatário e um segredo do cliente ou certificado como senha.
O Power BI Premium usa a mesma funcionalidade de entidade de serviço que Power BI Embedded. Para saber mais, confira Inserção de conteúdo do Power BI com entidades de serviço.
No Power BI Premium, você pode usar entidades de serviço com o ponto de extremidade de XMLA (análise XML) para automatizar tarefas de gerenciamento de modelos semânticos, como provisionar workspaces, implantar modelos e atualizar modelos semânticos com:
- PowerShell.
- Automação do Azure.
- Aplicativos Lógicos do Azure.
- Aplicativos cliente personalizados.
Somente novos workspaces dão suporte a conexões de ponto de extremidade XMLA usando entidades de serviço. Os workspaces clássicos não são compatíveis. Uma entidade de serviço tem apenas as permissões necessárias para executar tarefas para workspaces aos quais ela é atribuída. As permissões são atribuídas por meio do acesso ao workspace, assim como contas UPN (nome da entidade do usuário) regulares.
Para executar operações de gravação, a carga de trabalho de modelos semânticos da capacidade precisa ter o ponto de extremidade XMLA habilitado para operações de leitura/gravação. Os modelos semânticos publicados do Power BI Desktop devem estar com o recurso de formato avançado de metadados habilitado.
Criar uma entidade de serviço
As entidades de serviço são criadas como um registro de aplicativo no portal do Azure ou usando o PowerShell. Ao criar sua entidade de serviço, você deve copiar e salvar separadamente o nome do aplicativo, a ID do aplicativo (cliente), a ID do diretório (locatário) e o segredo do cliente. Para obter as etapas de criação de uma entidade de serviço, confira:
Criar um grupo de segurança do Microsoft Entra
Por padrão, as entidades de serviço têm acesso a configurações de locatário para as quais estejam habilitadas. Dependendo das configurações de administrador, o acesso pode incluir grupos de segurança específicos ou de toda a organização.
Para restringir o acesso da entidade de serviço a configurações de locatário específicas, você pode permitir o acesso a grupos de segurança específicos. Como alternativa, você pode criar um grupo de segurança dedicado para entidades de serviço e excluí-lo das configurações de locatário desejadas. Para criar um grupo de segurança e uma entidade de serviço, confira Criar um grupo básico e adicionar membros usando o Microsoft Entra ID.
Habilitar as entidades de serviço
Antes de poder começar a usar entidades de serviço no Power BI, um administrador precisa habilitar o acesso de entidade de serviço no portal de administração do Power BI.
- No Portal de administração do Power BI, selecione Configurações do locatário.
- Role até Configurações do desenvolvedor e, em seguida, expanda Permitir que as entidades de serviço usem APIs do Power BI.
- Selecione Habilitado.
- Para aplicar permissões a um grupo de segurança, selecione Grupos de segurança específicos (Recomendado).
- Insira o nome do grupo.
- Escolha Aplicar.
Acesso ao workspace
Para que a entidade de serviço tenha as permissões necessárias para executar operações em um modelo semântico e um workspace Premium, você precisa adicionar a entidade de serviço como um membro ou administrador do workspace. O uso do acesso ao workspace no serviço do Power BI é descrito aqui, mas você também pode usar a API REST Adicionar Usuário de Grupo.
No serviço do Power BI, para um workspace, selecione Mais>Acesso ao workspace.
Pesquise pelo nome do aplicativo, depois adicione a entidade de serviço como Administrador ou Membro do workspace.
Cadeias de conexão do ponto de extremidade XMLA
Depois que você tiver criado uma entidade de serviço, habilitado as entidades de serviço para seu locatário e adicionado a entidade de serviço ao acesso do workspace, você poderá usá-la como uma identidade de usuário em cadeias de conexão com o ponto de extremidade XMLA. A diferença é que, em vez dos parâmetros user id
e password
, você especifica a ID do aplicativo, a ID do locatário e o segredo do aplicativo.
Data Source=powerbi://api.powerbi.com/v1.0/myorg/<workspace name>; Initial Catalog=<dataset name>;User ID=app:<appId>@<tenantId>;Password=<app_secret>;
PowerShell
Abra uma sessão do PowerShell para executar o código de exemplo a seguir.
Usar o módulo SQLServer
No seguinte exemplo, AppId
, TenantId
e AppSecret
são usados para autenticar uma operação de atualização de modelo semântico:
Param (
[Parameter(Mandatory=$true)] [String] $AppId,
[Parameter(Mandatory=$true)] [String] $TenantId,
[Parameter(Mandatory=$true)] [String] $AppSecret
)
$PWord = ConvertTo-SecureString -String $AppSecret -AsPlainText -Force
$Credential = New-Object -TypeName "System.Management.Automation.PSCredential" -ArgumentList $AppId, $PWord
Invoke-ProcessTable -Server "powerbi://api.powerbi.com/v1.0/myorg/myworkspace" -TableName "mytable" -DatabaseName "mydataset" -RefreshType "Full" -ServicePrincipal -ApplicationId $AppId -TenantId $TenantId -Credential $Credential
AMO (Objetos de Gerenciamento de Análise) e ADOMD.NET
Ao conectar com aplicativos cliente e aplicativos Web, você pode usar os pacotes instaláveis das bibliotecas cliente AMO e ADOMD versão 15.1.42.26 (junho de 2020) e superiores do NuGet para dar suporte a entidades de serviço nas cadeias de conexão usando a seguinte sintaxe: app:AppID
e senha ou cert:thumbprint
.
No exemplo a seguir, os valores appID
e password
são usados para executar uma operação de atualização de modelo de banco de dados:
string appId = "xxx";
string authKey = "yyy";
string connString = $"Provider=MSOLAP;Data source=powerbi://api.powerbi.com/v1.0/<tenant>/<workspacename>;Initial catalog=<datasetname>;User ID=app:{appId};Password={authKey};";
Server server = new Server();
server.Connect(connString);
Database db = server.Databases.FindByName("adventureworks");
Table tbl = db.Model.Tables.Find("DimDate");
tbl.RequestRefresh(RefreshType.Full);
db.Model.SaveChanges();