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

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.

Related

any Rest APIs to create a report in powerbi service?

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

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

Power BI - generating embed code for a dashboard instead of a report

I can't figure out how to generate an embed code for a Power BI Dashboard - see picture of dashboard below. There is a "more options" on the dashboard, but no actual way to get an embed code in order to embed on a public website. I have this in report form (it's just the map, so only a one-page report) and I can generate an embed code for the report.
If I click on the dashboard itself, it just takes me back to the report, and any embed code I generate there just embeds the report, which annoyingly is not centered and includes the Power BI menu at the bottom:
Am I missing something here? Where is the option to get an embed code for a dashboard?
The Publish to Web option in Power BI is for reports only, not for dashboards or Apps. Any other embedding for a publicly accessible object must use the custom app approach, with the relevant Premium or Embedded Service.

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

Power BI Embedded Report Picker

I have an embedded site for my users to view a report. I have one master login for Power BI that all customers are routed through.
Authentication and the request are done through a .NET backend using PowerBI.Api.V2. Everything works well when I hardcode a single reportId and embed the fullscreen iframe.
My question is for customers that have multiple reports; Is there a built in report-picker-report that I can embed where the report selection is already handled for me? Or should I work on building an interface after retrieving the list of reports my users can pick from?
No, there are no built-in pickers. Power BI provides an API interface and you must implement these for yourself. Of course, you can build these pickers and make them available for us :)
To get list of workspaces you need to call Get Groups. This will give you a list of user's workspaces. You can show their name property values to the user, but you will need their id (the guid). When you know the id of a workspace, you can list the reports in it by calling Get Reports In Group. The same way you can call Get Dashboards In Group and Get Tiles In Group.