Forum Discussion

Don-Bot's avatar
Don-Bot
Icon for Helper V rankHelper V
2 years ago
Solved

Create a new Power BI Report using C# in XMLA Endpoint

I've worked through the Learning TOM code and have successfully created a dataset in Powe BI Service with it.  I can go into it manually and create my own reports from scratch.   However, is there ...
  • Don-Bot's avatar
    Don-Bot
    2 years ago

    Thank you for the reply lbendlin I was actually able to accomplish this utilizing REST API scripts.  Although now I am working on how to create an access token programmatically.  

     

    using System;
    using System.Net.Http;
    using System.Text;
    using System.Threading.Tasks;
    
    
    namespace Learning_TOM
    {
        internal class ReportClone
        {
            static readonly HttpClient client = new HttpClient();
    
            public static async Task callReportCloneRestAPI()
    
            {
                
                try
                {
                    var reportName = "REPORT_NAME";
                    var reportID = "REPORT_ID";
                    var targetModelID = "MODEL_ID";
                    var targetWorkspaceID = "WORKSPACE_ID";
                    var bearer = "TOKEN";
    
                    var url = $"https://api.powerbi.com/v1.0/myorg/reports/{reportID}/Clone";
                    var data = "{\r\n  \"name\": \"" + reportName + "\",\r\n  \"targetModelId\": \"" + targetModelID + "\",\r\n  \"targetWorkspaceId\": \"" + targetWorkspaceID + "\"\r\n}";
                   
    
                    client.DefaultRequestHeaders.Add("Authorization", "Bearer " + bearer);
    
                    var content = new StringContent(data, Encoding.UTF8, "application/json");
    
                    HttpResponseMessage response = await client.PostAsync(url, content);
    
                    response.EnsureSuccessStatusCode();
    
                    string responseBody = await response.Content.ReadAsStringAsync();
    
                    Console.WriteLine(responseBody);
                }
                catch (Exception ex)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("Error copying reports: " + ex.Message);
                    Console.ResetColor();
                }
            }
    
        
        }
    }