Automatizace úloh pracovního prostoru Premium a sémantických modelů pomocí instančních objektů

Instanční objekty jsou registrace aplikace Microsoft Entra ID, kterou vytvoříte v rámci tenanta za účelem provádění bezobslužných operací na úrovni prostředků a služeb. Jedná se o jedinečný typ identity uživatele s názvem aplikace, ID aplikace, ID tenanta a tajným kódem klienta nebo certifikátem pro heslo.

Power BI Premium používá stejné funkce instančního objektu jako Power BI Embedded. Další informace najdete v tématu Vložení obsahu Power BI pomocí instančních objektů.

V Power BI Premium můžete pomocí instančních objektů s koncovým bodem XMLA (analýza XML) automatizovat sémantické úlohy správy modelů, jako je zřizování pracovních prostorů, nasazování modelů a sémantická aktualizace modelu:

  • PowerShell.
  • Azure Automation
  • Azure Logic Apps.
  • Vlastní klientské aplikace.

Připojení koncových bodů XMLA podporují pouze nové pracovní prostory pomocí instančních objektů. Klasické pracovní prostory se nepodporují. Instanční objekt má pouze tato oprávnění potřebná k provádění úloh v pracovních prostorech, ve kterých je přiřazena. Oprávnění se přiřazují prostřednictvím přístupu k pracovnímu prostoru, podobně jako běžné účty hlavního názvu uživatele (UPN).

Aby bylo možné provádět operace zápisu, musí mít úloha sémantických modelů kapacity povolený koncový bod XMLA pro operace čtení i zápisu. Sémantické modely publikované z Power BI Desktopu by měly mít povolenou funkci rozšířeného formátu metadat.

Vytvoření instančního objektu služby

Instanční objekty se vytvářejí jako registrace aplikace na webu Azure Portal nebo pomocí PowerShellu. Při vytváření instančního objektu nezapomeňte zkopírovat a uložit samostatně název aplikace, ID aplikace (klienta), ID adresáře (tenanta) a tajný klíč klienta. Postup vytvoření instančního objektu najdete tady:

Vytvoření skupiny zabezpečení Microsoft Entra

Ve výchozím nastavení mají instanční objekty přístup k nastavení tenanta, pro která jsou povolená. V závislosti na nastavení správce může přístup zahrnovat konkrétní skupiny zabezpečení nebo celou organizaci.

Pokud chcete omezit přístup instančního objektu na konkrétní nastavení tenanta, můžete povolit přístup ke konkrétním skupinám zabezpečení. Případně můžete vytvořit vyhrazenou skupinu zabezpečení pro instanční objekty a vyloučit ji z nastavení požadovaného tenanta. Pokud chcete vytvořit skupinu zabezpečení a přidat instanční objekt, přečtěte si téma Vytvoření základní skupiny a přidání členů pomocí ID Microsoft Entra.

Povolení instančních objektů

Než začnete používat instanční objekty v Power BI, musí správce povolit přístup instančního objektu na portálu Správa Power BI.

  1. Přejděte na portál Správa Power BI a pak vyberte Nastavení tenanta.
  2. Přejděte do nastavení pro vývojáře a potom rozbalte možnost Povolit instančním objektům používat API Power BI.
  3. Vyberte Povoleno.
  4. Pokud chcete u skupiny zabezpečení použít oprávnění, vyberte Konkrétní skupiny zabezpečení (doporučeno).
  5. Zadejte název skupiny.
  6. Vyberte Použít.

Snímek obrazovky znázorňující portál Správa s vybraným nastavením tenanta Povolit instančním objektům používat API Power BI se rozbalí se zvýrazněnou možností povolenou.

Přístup k pracovnímu prostoru

Aby měl instanční objekt potřebná oprávnění k provádění operací pracovního prostoru Premium a sémantických modelů, musíte instanční objekt přidat jako člena pracovního prostoru nebo Správa. Tady je popsáno použití přístupu k pracovnímu prostoru v služba Power BI, ale můžete také použít rozhraní REST API pro přidání uživatele skupiny.

  1. V služba Power BI pracovního prostoru vyberte Další>přístup k pracovnímu prostoru.

    Snímek obrazovky se seznamem pracovních prostorů Zvýrazní se další ikona a přístup k pracovnímu prostoru.

  2. Vyhledejte název aplikace a pak přidejte instanční objekt jako Správa nebo člena do pracovního prostoru.

    Snímek obrazovky s dialogovým oknem pro přístup zobrazující název instančního objektu Správa je vybraná.

Připojení ionové řetězce pro koncový bod XMLA

Po vytvoření instančního objektu povolte instanční objekty pro vašeho tenanta a přidejte instanční objekt do přístupu k pracovnímu prostoru, použijte ho jako identitu uživatele v připojovací řetězec s koncovým bodem XMLA. Rozdíl spočívá v tom, že místo user idpassword parametrů zadáte ID aplikace, ID tenanta a tajný klíč aplikace.

Data Source=powerbi://api.powerbi.com/v1.0/myorg/<workspace name>; Initial Catalog=<dataset name>;User ID=app:<appId>@<tenantId>;Password=<app_secret>;

PowerShell

Otevřete relaci PowerShellu a spusťte následující ukázkový kód.

Použití modulu SQLServer

V následujícím příkladu se AppIdTenantIdpoužívá k AppSecret ověření operace aktualizace sémantického modelu:

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

Objekty správy analýzy (AMO) a ADOMD.NET

Když se připojujete s klientskými aplikacemi a webovými aplikacemi, můžete pomocí klientských knihoven AMO a ADOMD verze 15.1.42.26 (červen 2020) a novějších instalovatelných balíčků z NuGetu podporovat instanční objekty v připojovací řetězec pomocí následující syntaxe: app:AppID a hesla nebo cert:thumbprint.

V následujícím příkladu appID se password hodnoty používají k provedení operace aktualizace databáze modelu:

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();