any Rest APIs to create a report in powerbi service? - powerbi

i have searched official powerbi docs thoroughly.
There are APIs for creating datasets, updating them and for deleting them.
Additionally, there are APIs to clone, update and delete a report.
But after searching a lot, I have not been able to find anything that can help me in creation of a fresh new (visual) report through API?
PS: actually I want to create a visual (not paginated) report without manually going to powerbi desktop or service. I just want to do it with the help of a powerbi rest API.
So is there anyway we can create a new report from existing dataset w/ rest API?
Also, if not possible with rest apis, could this may be possible with powerbi-embedding?

Yes, it is possible.
First, you need to generate an embed token for report creation from a dataset present in your PBI Service. It can be done by making a POST request to the API from backend.
After that, you can create a new report from that dataset. (Using createReport method in your frontend)
example:
let embedCreateConfiguration = {
tokenType: tokenType,
accessToken: accessToken,
embedUrl: embedURL,
datasetId: datasetId,
settings: settings, //optional
theme: theme, // optional
};
// Grab the reference to the div HTML element that will host the report
let embedContainer = $('#embedContainer')[0];
// Create report
let report = powerbi.createReport(embedContainer, embedCreateConfiguration);
References:
Create, edit, and save an embedded report | Microsoft Learn
Embed Token - Reports GenerateTokenForCreateInGroup - REST API (Power BI Power BI REST APIs) | Microsoft Learn

Related

Real time data report in powerbi service

We have a react app where i want to embed a powerbi service report.
That report (kept in powerbi service) data will update the user interact with our react app's database.
I know there is a way-
if we connect that report with an SQL database source, and everytime that database source is refreshed, we will hit a powerbi provided 'refresh report api' and the updated data will be reflected in the embedded report..
But I want to know if there is any other more elegant way to achieve the same?
Alternative way-
also if there is a way to create a new report inside powerbi service just by hitting a powerbi endpoint with given json, and then embed that newly created report inside our application. that will be better.
as far as i have seen there docs they have apis to clone, delete, update a report but not to create one?
in case you know please let me know.
Thanks in advance.
my another related question is here for more reference - Create a report in powerbi service through APIs in React
also this community discuss - https://community.powerbi.com/t5/Service/Create-a-report-in-powerbi-service-through-APIs-in-React/m-p/3055794
If you use a DirectQuery model the report will generate queries to your database when the user interacts with a report. There will be no "refresh".

Adding a header to a web API request in the data sources section of a report in PBI Report Server

I have created a report using power bi desktop (Version January 2021). In order to get the data for this report, I connect to a web API using the provided API key in the header part of the request:
This part works fine and I get the necessary data to work on the Power BI desktop.
When I publish the created report to a Power BI Report Server, as you can see in the following image, there is no way to add the header data which in this case is mandatory to authenticate:
The Authentication part in the Credential section in the above image does not support adding headers data and only accepts Anonymous, Basic, and Windows authentication which are not applicable here (The test fails).
As the data in my report changes regularly and I need to schedule an automatic refresh, the Report Server has to connect to the Web API at the scheduled times in order to get the latest version of the data.
I would appreciate it if you could help me to solve the encountered problem. Regards
The access key should be part of the query options and in PowerQuery you should have something like
Source = Csv.Document(
Web.Contents(
"http://example.com",
[
RelativePath = "api",
Query =
[
api-key = "s4fad456df"
]
]
),
),
The authentication to the web data source is always Anonymous in Power BI.
https://learn.microsoft.com/en-us/powerquery-m/web-contents

Power BI Embed Hide tab page

I have a embed Power Bi on my Aspnet app, I use the JavaScript Api to embed the Power Bi to my view.
In my Power Bi I have 4 reports. I need apply a rule to show for some users all 4 reports, and the others show only 1 or 2.
The question is, is there any way to hide the tab so the user can't click? I tried some ways, looking at the Microsoft documentation, but without success.
powerbi
Yes, You can hide the tab in your embedded report by updating the setting and using navContentPaneEnabled. Please find the below code snippet:
Create new settings:
const newSettings = {
navContentPaneEnabled: false
};
Update new Settings:
await report.updateSettings(newSettings);
Please find the reference here: https://community.powerbi.com/t5/Developer/How-to-Hide-Power-BI-iFrame-Embedded-Report-Tabs/m-p/121541

Create a Mobile Responsive Version of a PowerBI report that is Published to the Web

I've recently published a specific PowerBI report and despite creating a 'Phone' View on PowerBI Desktop this didn't show up in the final embed code.
I've looked into PowerBI Embedded Playground and managed to generate the relevant access tokens and even try it out, but still couldn't figure out how to modify the code in such a way to generate a mobile view.
The questions and answers below somehow didn't give me the insight I needed, still somehow need some additional work:
Mobile view is not being shown for embedded powerbi report
Create Report in Embed View via PowerBI API
Power BI RS web embedding in mobile web browser
What do I need to do to get started? Which documentation do I need to look into exactly? I need to embed this report in a Sharepoint 2010 Page and I need it to be mobile responsive on page load and not via a seperate link.
This isn't related to the access token in any way. It is generated before configuring the embedding process. To embed the report in phone view, you must specify MobilePortrait layout type in the embed configuration, i.e. something like this:
var config = {
.....
settings: {
filterPaneEnabled: true,
navContentPaneEnabled: true,
layoutType: models.LayoutType.MobilePortrait <-- THIS ONE
}
};
If you omit layoutType, it will be shown in the landscape view (i.e. like in the desktop). For more information about the configuration see Embed Configuration Details, and for embedding in general you should start from Embedding Basics.

Power BI embedding issues

I'm doing some R&D with a power BI Visual Studio solution and I'm struggling to programmatically embed content. I have the Power BI Pro trial.
From the Embed Setup webpage, I created an application ("User owns Data" with sample data) and downloaded the sample VS solution which comes configured with the GUIDs for the app that was just created. The app appears in my Power BI web interface and when I run the VS web app, I get three buttons (embed report | embed dashboard | embed tile). This works - I can view the embedded report.
My problem is when I install an app using the Power BI interface and then try to run my VS project using the appId of the app I just installed. For example - I installed the Github app and chose to use sample data. If I plug in the appId, workspace Id and report Id into my VS project, I get the following message when I run it and click the "Embed Report" button
AADSTS700016: Application with identifier '5c7d26d1-006d-43ac-9eb7-6aa3e1f6b364' was not found in the directory 'foo.onmicrosoft.com'. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You may have sent your authentication request to the wrong tenant.
Trace ID: e77376aa-b7ca-4c09-9184-31f96eea9800
Correlation ID: d42a0b9c-c93d-4601-87d6-05d9cca70e0d
Timestamp: 2019-06-04 15:59:58Z
Why is it that an app I created using the "Embed Setup" page works, but a different app's Ids fail with that error?
I am using the same login credentials in the VS project as I am logging into the Power BI website with, as well as when I created an app with the "Embed Setup" page.
Could it be that it is looking for an app that is registered in my Azure portal under the Active directory > App Registrations? If so, why does the other Power BI app work (Embed Setup route)?
When I tested creating an app using "App Owns Data", the application was registered in my Azure AD
As a side note - is there an easy way to get app, workspace and report Ids for an app? AppId is easy enough to grab from the URL, but workspace Id never seems to appear
UPDATE
After using the 'onboarding embed tool' as suggested #Andrey, I do see the application registered in Azure, but if I replace the applicationId web.config key with the Id of the Azure application, I get a different error message (below). I'm confident that the applicationId int the web.config of the generated project is specifically the (Power BI) App Id and not the Azure Application Id (not confusing at all, Microsoft!). Using the Azure Application Id, I get the following error:
Error
AADSTS7000218: The request body must contain the following parameter: 'client_assertion' or 'client_secret'.
Trace ID: 5e8391c2-4681-4c8e-9294-a99fd56dbb00
Correlation ID: 10d48927-d5ec-45bd-a5b3-e9c1e147f97c
Timestamp: 2019-06-05 15:29:44Z
I feel like there is documentation that I need but can't find. I've created the Application that appears in Azure (I had done this before, but could not find any connection between this application and my PowerBI page). I've created apps, workspaces, and reports in Power BI. All I want to do is use the .Net SDK to pull in visualisations from a specific Power BI installation i.e. insert a visualisation of a client's data onto their website.
I'll keep digging and update when I find a solution
You are mixing two different "app ids". First app ID (also called client ID) is the one that you are registering in the onboarding embed tool (https://dev.powerbi.com/apps), which I believe is what you called "Embed Setup" (or embed setup is something on top of that). This app registrations will be visible in Azure AD after that. The other "app" that you mention is "Power BI App", i.e. a collection of reports that are packed together in an app. These two "apps" are completely different and you can't use the ID of the later one when embedding Power BI elements.
When you open a report saved in a workspace, the URL will be in the following format:
https://app.powerbi.com/groups/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/reports/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/ReportSection
First guid (the x-es after groups) is the workspace ID (also called group ID). The later one (after reports) is the report ID. There is no "workspace and report Ids for an app", because your app (the one that you registered and is visible in Azure AD) can access various reports in various workspaces. The reports packed in a "Power BI app" should be embedded from their original workspace, not from the app.
I eventually found the solution I was looking for. Essentially you use the PowerBI C# SDK to authenticate and return your PowerBI data - like collections of reports, which you can then embed using the JS API
private async Task<AuthenticationResult> DoAuthentication()
{
AuthenticationResult authenticationResult = null;
if (AuthenticationType.Equals("MasterUser"))
{
var authenticationContext = new AuthenticationContext(AuthorityUrl);
// Authentication using master user credentials
var credential = new UserPasswordCredential(Username, Password);
authenticationResult = authenticationContext.AcquireTokenAsync(ResourceUrl, ApplicationId, credential).Result;
}
else
{
// For app only authentication, we need the specific tenant id in the authority url
var tenantSpecificURL = AuthorityUrl.Replace("common", Tenant);
var authenticationContext = new AuthenticationContext(tenantSpecificURL);
// Authentication using app credentials
var credential = new ClientCredential(ApplicationId, ApplicationSecret);
authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, credential);
}
return authenticationResult;
}
then, to get a list of reports
public IList<Report> GetReportsByGroup(string groupId)
{
if (_reports == null)
{
var Client = new PowerBIClient(new Uri(ApiUrl), new TokenCredentials(AccessToken, "Bearer"));
_reports = Client.Reports.GetReportsInGroup(groupId).Value;
}
return _reports;
}