Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started

Reply
Don-Bot
Helper III
Helper III

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 a way I can create a power bi report using C# and XMLA Endpoint?  My end goal is to publish the dataset I can now create with it's own blank report that users can just edit and adjust on their own in embeded.

 

Here are links I've gone through but I haven't found anything yet.

 

https://github.com/PowerBiDevCamp/Tabular-Object-Model-Tutorial/blob/main/Solution/Exercise04/PBI-To...

https://www.sqlservercentral.com/blogs/power-bi-meets-programmability-tom-xmla-and-c

https://www.powerbidevcamp.net/articles/programming-datasets-with-TOM/

1 ACCEPTED SOLUTION

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

    
    }
}

View solution in original post

3 REPLIES 3
lbendlin
Super User
Super User

Look at reports in notebooks. They use some AI functions for a basic report layout based on the provided data.

 

Announcing Power BI in Jupyter notebooks | Microsoft Power BI Blog | Microsoft Power BI

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

    
    }
}

I thought your request was for creating a report from scratch, rather than cloning a report.

Helpful resources

Announcements
Europe Fabric Conference

Europe’s largest Microsoft Fabric Community Conference

Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.

AugPowerBI_Carousel

Power BI Monthly Update - August 2024

Check out the August 2024 Power BI update to learn about new features.

August Carousel

Fabric Community Update - August 2024

Find out what's new and trending in the Fabric Community.