Some time ago, when Microsoft released the first version of Power BI Rest API I already wrote a wrapper for C# which allowed you to map the object from the API into regular C# objects and work with them locally. However, there have been some major upgrades since then (Actually they were already announced in July 2016 but I did not find anytime to work on this again until now ). Anyway, I just published a new version of my C# wrapper on my GitHub site: https://github.com/gbrueckl/PowerBI.API.Client
To use it, you first need to create an Azure AD application and get an ApplicationID – this is very well described here or can be done directly at https://dev.powerbi.com/apps
A new PowerBI API Client object can then be created using the ApplicationID:
Basically, most of the features described in the API reference are also included in the API Wrapper. So you can now use C# to create your PowerBI model locally and deploy it to the PowerBI service! The only to keep in mind is that the dataset you create via the API can only be sourced by pushing data into it using the Push/Streaming API. As this can be quite cumbersome sometimes, I also added the functionality to publish a whole C# DataTable with basically just two lines of code to publish your reference data/dimensions:
DataTable dataTable = new DataTable();
/* populate the dataTable */
// create a PBI table from a regular DataTable object
PBITable productsTable = new PBITable(dataTable);
// publish the table and push the rows from the dataTable to the PowerBI table
productsTable.PublishToPowerBI(true);
This snippet basically deploys the table structure to the PowerBI service and populates it with data from the DataTable:
For your “fact”-data you can also create single rows on your own using the PBIRow-object and publish them manually e.g. for WriteBack-scenarios:
PBIRow row = salesTable.GetSampleRow();
row.SetValue("ProductKey", 1);
row.SetValue("SalesDate", DateTime.Now);
row.SetValue("Amount_BASE", 100);
salesTable.PushRowToPowerBI(row);
Depending on the type of DataSet you choose (Push, PushStreaming or Streaming), you can also create DAX Measures or Relationships:
dataset.Relationships.Add(new PBIRelationship("MyRelationship", salesTable.GetColumnByName("ProductKey"), productsTable.GetColumnByName("ProductKey")));
Of course, all the features that were already supported in the first version, are still supported:
- Get Embed-URLs of Reports and Tiles
- List Reports, Dashboards, Datasets, …
The new version also supports Streaming and PushStreaming datasets in the same way as it does for regular Push datasets. For details on Streaming datasets please take a look at Real-time streaming in PowerBI
I recommend to explore the API on your own by simply building your first PowerBI Push/Streaming Model on your own!
For the latest features and improvements please refer to the GitHub repository which will be updated frequently.
Any feedback and participation in the further development is highly appreciated and will be done via the GitHub repository.
Hi Gerhard
This is cool info on power bi.Appreciate your kind work.
I am using power bi for analytic purpose in my application. I was able to push new dataset and new rows as well but I need your suggestion to update new rows data into power bi account.
I am using power bi api nuget pkg into my application.
Can you help me in resolving my query?
Thanks
Vipul
right now, the API does not support updating any rows that hare already been loaded/pushed to a table
the only workaround I could think of is to clear the whole table and submit all rows again but I do not know if this is feasible in your scenario
-gerhard
Hi Gerhard,
Could you please tell me how to import a pbix file to a group using the wrapper.
When i tried the sample application the file is imported the default group.
Thanks in advance.
Arun
Hi Arun,
instead of calling ImportPBIX() on the PBIClient itself, you first need to get the group and then run the import on the group:
PBIGroup group = pbic.GetGroupByName(“MyGroup”);
PBIImport import = group.ImportPBIX(“myDataset”, @”D:\Desktop\myDataset.pbix”, PBIImportConflictHandlerMode.CreateOrOverwrite);
regards,
-gerhard