Forum Discussion
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://www.sqlservercentral.com/blogs/power-bi-meets-programmability-tom-xmla-and-c
https://www.powerbidevcamp.net/articles/programming-datasets-with-TOM/
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(); } } } }
3 Replies
- lbendlin
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
- Don-Bot
Helper V
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(); } } } }- lbendlin
Super User
I thought your request was for creating a report from scratch, rather than cloning a report.