Fragmenty kódu pro migraci obsahu z kolekce Pracovních prostorů Power BICode snippets for migrating content from Power BI Workspace Collection

Tady jsou některé fragmenty kódu základních operací, které jsou potřebné k migraci obsahu.Here are some code snippets of basic operations needed for content migration. Související postupy pro některé typy sestav najdete v článku Jak migrovat obsah kolekce Pracovních prostorů Power BI do Power BI Embedded.For related flows for certain report types, see How to migrate Power BI workspace collection content to Power BI Embedded.

K dispozici je nástroj pro migraci, který vám může pomoct s kopírováním obsahu z Power BI Embedded (PaaS) do služby Power BI (SaaS).A migration tool is available for you to use in order to assist with copying content from Power BI Embedded (PaaS) to the Power BI service (SaaS). Je obzvlášť užitečný v případě, že máte velké množství obsahu.Especially if you have a lot of content. Další informace najdete v článku Nástroj pro migraci Power BI Embedded.For more information, see Power BI Embedded migration tool.

Kód uvedený níže jsou příklady, které využívají jazyk C# a sadu Power BI .NET SDK.The code below are examples using C# and the Power BI .NET SDK.

Při spouštění níže uvedených fragmentů kódu používejte následující obory názvů.Make sure you are using the following namespaces to execute the code snippets below.

using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.PowerBI.Api.V1;
using Microsoft.PowerBI.Api.V1.Models;
using Microsoft.PowerBI.Api.V2;
using Microsoft.PowerBI.Api.V2.Models;
using Microsoft.Rest;
using Microsoft.Rest.Serialization;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;

Export sestavy z pracovního prostoru PaaSExport report from PaaS workspace

    // Create a token credentials with "AppKey" type
    var credentials = new TokenCredentials(<myAppKey==>, "AppKey");

    // Instantiate your Power BI client passing in the required credentials
    var client = new PowerBIClient(credentials);

    client.BaseUri = new Uri("https://api.powerbi.com");

    var response = client.Reports.ExportReportWithHttpMessagesAsync(<myWorkspaceCollectionName>, <myWorkspaceId>, <myReportId>);

    if (response.Result.Response.StatusCode == HttpStatusCode.OK)
    {
        var stream = response.Result.Response.Content.ReadAsStreamAsync();

        using (FileStream fileStream = File.Create(@"C:\Migration\myfile.pbix"))
        {
            stream.Result.CopyTo(fileStream);
            fileStream.Close();
        }
    }

Import sestavy do pracovního prostoru SaaSImport report to SaaS workspace

    AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.net/common/");
    var PBISaaSAuthResult = authContext.AcquireToken("https://analysis.windows.net/powerbi/api", <myClientId>, new Uri("urn:ietf:wg:oauth:2.0:oob"), PromptBehavior.Always);
    var credentials = new TokenCredentials(PBISaaSAuthResult.AccessToken);
    var client = new PowerBIClient(new Uri($"{"https://api.powerbi.com"}"), credentials);
    using (var file = File.Open(@"C:\Migration\myfile.pbix", FileMode.Open))
    {
        client.Imports.PostImportWithFileInGroup(<mySaaSWorkspaceId>, file, "importedreport", "Abort");
        while (true) ;
    }

Extrakce připojovacího řetězce DirectQuery ze sestavy PaaSExtract DirectQuery connection string from PaaS report

Tento kód slouží k aktualizaci souboru PBIX po migraci do SaaS.This is for updating the PBIX after migrating to SaaS.

    // Extract connection string from PaaS - DirectQuery report
    // Create a token credentials with "AppKey" type
    var credentials = new TokenCredentials(<myAppKey==>, "AppKey");

    // Instantiate your Power BI client passing in the required credentials
    var client = new PowerBIClient(credentials);

    client.BaseUri = new Uri("https://api.powerbi.com");

    var reports = client.Reports.GetReports(<myWorkspaceCollectionName>, <myWorkspaceId>);

    Report report = reports.Value.FirstOrDefault(r => string.Equals(r.Id, <myReportId, StringComparison.OrdinalIgnoreCase));

    var datasource = client.Datasets.GetDatasources(<myWorkspaceCollectionName>, <myWorkspaceId>, report.DatasetId);

Aktualizace připojovacího řetězce DirectQuery v pracovním prostoru SaaSUpdate DirectQuery connection string is SaaS workspace

    public class ConnectionString
    {
        [JsonProperty(PropertyName = "connectionString")]
        public string connection { get; set; }
    }

    AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.net/common/");
    var PBISaaSAuthResult = authContext.AcquireToken("https://analysis.windows.net/powerbi/api",<myclient_id>, new Uri("urn:ietf:wg:oauth:2.0:oob"), PromptBehavior.Always);
    var credentials = new TokenCredentials(PBISaaSAuthResult.AccessToken);
    var client = new PowerBIClient(new Uri($"{"https://api.powerbi.com"}"), credentials);

    ConnectionString connection = new ConnectionString() { connection = "data source = <server_name>; initial catalog = <db_name>; persist security info = True; encrypt = True; trustservercertificate = False" };

    client.Datasets.SetAllConnectionsInGroup(<myWorkspaceId>, <dataset_id>, connection);

Nastavení přihlašovacích údajů pro DirectQuery v pracovním prostoru SaaSSet DirectQuery credentials in SaaS workspace

V tomto fragmentu kódu používáme v zájmu jednoduchosti nezašifrované přihlašovací údaje. Podporuje se ale také odesílání zašifrovaných přihlašovacích údajů.In this snippet, we are using unencrypted credentials for simplicity, sending encrypted credentials is supported as well.

    public class ConnectionString
    {
        [JsonProperty(PropertyName = "connectionString")]
        public string connection { get; set; }
    }

    public class BasicCreds
    {
        [JsonProperty(PropertyName = "username")]
        public string user { get; set; }

        [JsonProperty(PropertyName = "password")]
        public string pwd { get; set; }
    }

    var basicCreds = new BasicCreds() { user = <sqldb_username>, pwd = <sqldb_password> };
    var body = new SetCredsRequestBody() { credentialType = "Basic", basicCredentials = basicCreds };

    var url = string.Format("https://api.powerbi.com/v1.0/myorg/gateways/{0}/datasources/{1}", <gateway_id>, <datasource_id>);
    var request = new HttpRequestMessage(new HttpMethod("PATCH"), url);
    // Set authorization header from you acquired Azure AD token
    AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.net/common/");
    var PBISaaSAuthResult = authContext.AcquireToken("https://analysis.windows.net/powerbi/api", <myclient_id>, new Uri("urn:ietf:wg:oauth:2.0:oob"), PromptBehavior.Always);

    request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", PBISaaSAuthResult.AccessToken);

    request.Content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");

    HttpClient simpleClient = new HttpClient();
    var response = await simpleClient.SendAsync(request);

Odeslání datové sady a sestavyPush dataset and report

Budete muset znovu vytvořit sestavu pro vytvořenou datovou sadu.You will need to rebuild the report for the created dataset.

V tomto fragmentu kódu předpokládáme, že datová sada typu Push už je v pracovním prostoru v prostředí SaaS.In this snippet, we assume that the pushable dataset is already in a workspace within the SaaS environment. Další informace o rozhraní Push API najdete v článku Zápis dat do datové sady Power BI.For information about the push API, see Push data into a Power BI dataset.

    var credentials = new TokenCredentials(<Your WSC access key>, "AppKey");

    // Instantiate your Power BI client passing in the required credentials
    var client = new Microsoft.PowerBI.Api.V1.PowerBIClient(credentials);
    client.BaseUri = new Uri("https://api.powerbi.com");

    // step 1 -> create dummy dataset at PaaS workspace
    var fileStream = File.OpenRead(<Path to your dummy dataset>);
    var import = client.Imports.PostImportWithFileAsync(<Your WSC NAME>, <Your workspace ID>, fileStream, "dummyDataset");
    while (import.Result.ImportState != "Succeeded" && import.Result.ImportState != "Failed")
    {
        import = client.Imports.GetImportByIdAsync(<Your WSC NAME>, <Your workspace ID>, import.Result.Id);
        Thread.Sleep(1000);
    }
    var dummyDatasetID = import.Result.Datasets[0].Id;

    // step 2 -> clone the pushable dataset and rebind to dummy dataset
    var cloneInfo = new Microsoft.PowerBI.Api.V1.Models.CloneReportRequest("pushableReportClone",null, dummyDatasetID);
    var clone = client.Reports.CloneReportAsync(<Your WSC NAME>, <Your workspace ID>, <Your pushable report ID>, cloneInfo);
    var pushableReportCloneID = clone.Result.Id;


    // step 3 -> Download the push API clone report with the dummy dataset
    var response = client.Reports.ExportReportWithHttpMessagesAsync(<Your WSC NAME>, <Your workspace ID>, pushableReportCloneID);
    if (response.Result.Response.StatusCode == HttpStatusCode.OK)
    {
        var stream = response.Result.Response.Content.ReadAsStreamAsync();
        using (fileStream = File.Create(@"C:\Migration\PushAPIReport.pbix"))
        {
            stream.Result.CopyTo(fileStream);
            fileStream.Close();
        }
    }

    // step 4 -> Upload dummy PBIX to SaaS workspace
    AuthenticationContext authContext = new AuthenticationContext("https://login.microsoftonline.net/common/");
    var PBISaaSAuthResult = authContext.AcquireToken("https://analysis.windows.net/powerbi/api", <Your client ID>, new Uri("urn:ietf:wg:oauth:2.0:oob"), PromptBehavior.Always);
    var credentialsSaaS = new TokenCredentials(PBISaaSAuthResult.AccessToken);
    var clientSaaS = new Microsoft.PowerBI.Api.V2.PowerBIClient(new Uri($"{"https://api.powerbi.com"}"), credentialsSaaS);
    using (var file = File.Open(@"C:\Migration\PushAPIReport.pbix", FileMode.Open))
    {

        var importSaaS = clientSaaS.Imports.PostImportWithFileAsyncInGroup(<Your GroupID>, file, "importedreport1", "Abort");
        while (importSaaS.Result.ImportState != "Succeeded" && importSaaS.Result.ImportState != "Failed")
        {
            importSaaS = clientSaaS.Imports.GetImportByIdAsync(importSaaS.Result.Id);
            Thread.Sleep(1000);
        }
        var importedreport1ID = importSaaS.Result.Reports[0].Id;


        // step 5 -> Rebind report to "real" push api dataset
        var rebindInfoSaaS = new Microsoft.PowerBI.Api.V2.Models.RebindReportRequest(<Your pushable dataset  ID at power bi>);
        var rebindSaaS = clientSaaS.Reports.RebindReportInGroupWithHttpMessagesAsync(<Your GroupID>, importedreport1ID, rebindInfoSaaS);

    }

Další krokyNext steps

Nástroj pro migraci Power BI EmbeddedPower BI Embedded migration tool
Vkládání pomocí Power BIEmbedding with Power BI
Jak migrovat obsah kolekce pracovních prostorů z Power BI Embedded do Power BIHow to migrate Power BI Embedded workspace collection content to Power BI
Jak vkládat řídicí panely, sestavy a dlaždice v Power BIHow to embed your Power BI dashboards, reports and tiles
Co je Power BI Premium?Power BI Premium - what is it?
Úložiště Git pro rozhraní API jazyka JavaScriptJavaScript API Git repo
Úložiště Git pro kódy C# služby Power BIPower BI C# Git repo
Ukázka vložení pomocí JavaScriptuJavaScript embed sample
Power BI Premium – dokument white paperPower BI Premium whitepaper

Máte další otázky?More questions? Zkuste se zeptat v komunitě Power BI.Try asking the Power BI Community