Work with Power BI Matrix taking data from DAX statement - powerbi

I have the following requirements:
The user will see a Power BI Matrix on a web page (as opposed to Power BI Desktop).
The web page should have three elements: a text field, a button and the Power BI Matrix (potentially included in a Power BI Report).
The user will enter the DAX statement in the text field and click on the button to direct the Matrix to take the DAX statement, execute it, and populate the data.
The user should be able to drill down in the Matrix.
The user may reenter a new DAX statement, refreshing the Matrix.
Now, all the documentation I could find, for example here, talk about the Matrix in Power BI Desktop (i.e. not web page) and the data taken by selecting manually tables/columns/measures (on the right side of the screen).
In Power BI Studio, I know that I can enter a DAX statement by creating a table in the top bar, for example if I have the DAX:
EVALUATE TOPN (3, branches)
I could create a table to populate the Matrix with:
BranchesTable = TOPN (3, branches)
But how to dynamically link a DAX statment defined at run-time to a Matrix on a web page?

This is not currently possible to do exactly what you want. You can dynamically change a data source and update the query used in a specific report but there isn't an API available (PowerBI REST or PowerBI JavaScript) to update what columns are on a visual in a report. You can get pretty close to what you want but the report cannot be displayed in View mode and it will have to be displayed in Edit mode so the user will have the ability to drag the fields generated from their updated DAX query results onto the Matrix visual manually if they submit a change.
Assuming you already have the pre-requisite App Registration setup and configuration completed and your ready to embed here are some steps to get close to what your looking for. If your not ready to embed there is some documentation below the 8 steps I provided to complete the pre-requisite setup to be able to embed.
Using PowerBI Desktop Create a template report that has a matrix visual and a connection to the data source you want to use. Be sure to set this report up using a specific query and NOT all tables in the data source whether its SQL or SSAS. (You specify the query under advanced options when you initially setup the data source in the report)
Setup a Power BI Data Gateway to the Data Source your report uses
Create a workspace on PowerBI.com to upload the report to
Using PowerBI desktop Publish the report you created in step 1 to the workspace you created in step 3
On your Web Application, when a user views the report viewer page, you need a way to identify each user. Lets assume you have UserId field that is a unique ID for each user. Call GetReports in group https://learn.microsoft.com/en-us/rest/api/power-bi/reports/getreportsingroup. You need to have a known report name plus the UserId. Lets assume its DynamicReport. So call GetReports and check if DynamicReport_UserId exists for the user trying to view the report viewer page in your web application.
In that API calls result from step 5, if the report does not exist for a user, use https://learn.microsoft.com/en-us/rest/api/power-bi/reports/clonereport to clone the template report you published in step 4.
Embed and display user specific template report (DynamicReport_UserId) for the user.
Have logic on the report viewer page so the user can submit and POST a DAX query. When they do a submit have logic to use https://learn.microsoft.com/en-us/rest/api/power-bi/datasets/updatedatasources on the back end to update the data source in their report and then embed the report again with their DAX statement and changed data.
The visual isn't going to automatically update to the new fields from the new query that is submitted by the user but the available data fields they have in editor mode will change. The user will have to drag and drop the fields from their DAX query onto the Matrix visual or whatever visual type they are going to chose to use. You won't be able to just display a report in View mode since you don't have a way to programatically update what fields are on visual. The user may even end up seeing a broken visual initially because of the changed query and the visual referencing fields from the previously used query. You could use PowerBI Javascript API to hide the existing visual to improve the user experience of the user not seeing something broken.
Let me know if you have any specific questions about these API calls or how to use them.
Here is where I've been looking for the Power BI JavaScript functionality https://github.com/Microsoft/powerbi-javascript/wiki (Can't find anything specific to matrix Visuals. The JavaScript functionality for visuals generic to Visuals and not Visual Type like Matrix or Card)
Here is Microsoft's documentation on the available REST APIs and https://learn.microsoft.com/en-us/rest/api/power-bi/
Here are some good resources to learn more about embedding
https://learn.microsoft.com/en-us/power-bi/developer/embedded/register-app
https://learn.microsoft.com/en-us/power-bi/developer/embedded/embedding
If you need drill down capability Hierarchies are a great option
https://spreadsheeto.com/power-bi-hierarchy/

Related

I have a power bi desktop connected with sql database and have some reports in it

I have a power bi desktop connected with SQL database and have some reports in it.
Now I want to generate following things
Every time user enter the name of the database my reports gets automatically refresh and exported in PDF or excel.
If possible I have browser where user can enter the SQL database name and UI pop up and end user can see the power BI dashboard where all reports automatically refreshed as per the user input SQL database name.
Thanks in advance!
For ask 1:
Refer Create and use R visuals in Power BI Once R is installed, open the Run R Script and paste the below R script, depending on your destination and save it.
Example as a excel file: write.xlsx(dataset, file = "C:/dataset.xlsx")
If you are interested in (PDF) and know Microsoft Power Platform, use On Power BI button clicked trigger followed with Export To File for Power BI Reports actions API to export a PDF to your local directory. Demo screenshot
For ask 2:
You can check Embed a report in a secure portal or website to easily embed reports in internal web portals and utilize Automatic page refresh in the Power BI service to set automatic page refresh for reports as long as the data source is DirectQuery.
Power BI Desktop has no restrictions for refresh intervals and can be as frequent as every second. But when reports are published to the Power BI service, certain restrictions apply.
Alternately you can use Datasets Power BI REST APIs - to trigger a refresh for the specified dataset from "My Workspace".
POST https://api.powerbi.com/v1.0/myorg/datasets/{datasetId}/refreshes
You can also leverage Q&A for Power BI business users the fastest way to get an answer from your data by asking a question using natural language.

How can I add new fields from Power BI to existing PowerApps that's integrated using PowerBIIntegration?

My initial requirements was to create a PowerApp that's integrated with Power BI using one of the columns (say col1) from tables used in Power BI report. I implemented this and published the app.
Now, the requirements have changed and the request is for an additional column (say col2) in the same app. How can I add an additional new field that can somehow show under PowerBIIntegration.Data.col2?
I didn't find any documentation or reference for the same. In past, I have built PowerApps with multiple columns but not sure how to add new column to existing PowerApps when integrated with Power BI.
I had the same issue, what you need to do is edit the power app from the PowerBI file or published version too.
Steps:
Open the PowerBI file or the published file with clicking on edit
Select your existing PowerApp visual
Add the new columns by checking the new column check boxes per usual
Then hover over the PowerApp Visual and click on on the three dots that appear in the top right of the powerApp visual, and select Edit,
This will launch PowerApp studio page so you can edit the app
Using this method will also connect your app to the live data set from the PowerBIIntegration data set.
source text:
"If you change the data fields associated with the visual, you will need to edit the app from Power BI service to make sure that the changes are propagated to PowerApps. You will observe unexpected behavior if the app is not edited from Power BI service to make sure that the new fields from Power BI reflect in the app."
https://powerapps.microsoft.com/et-ee/blog/powerbi-powerapps-visual/

How to remove page filter from a single visual taken from Embedded Power BI report

While trying to embed a single visual from an embedded Power BI report, the page filters applied to the report is also coming along the Visual and I am not able to remove it using removeFilter function mentioned in Power BI playground. I tried like :
Take the visual from report and tried removing filter to the single visual.
Remove the filter from report (successful) and get the Single Visual.
In both cases, Visuals are displayed with Filter.
Could anyone please help me out?
Dashboard are basically for presentation purpose. First you will generate your desired output for a visual in the report using - Slicing, Filtering and drilling down. Once your visual is showing your expected output, you can then PIN your visual to your target dashboard. Remember, once you pinned a visual to a dashboard, you can not change it any more in the dashboard. If you need changes, you need to perform in in the report and then again pin your final output to the dashboard.
Lets go through some comment/explanation from different blogs and tutorials-
Tiles/visuals pinned to a dashboard are displayed based on the filters applied
to them via the filter pane OR via slicers OR via cross filtering at
the time of pinning in report.
Dashboards do not currently have filters that will allow filtering
across tiles/visuals.
A dashboard can contain charts from multiple reports. That’s why a
sliver doesn't make sense on a dashboard, because the slicer can't
filter all charts/datasets.
Whatever, I also found some comments as below, but I have not enough knowledge about the approach mentioned.
If you would like the ability to filter specific tiles on a dashboard,
pin live report pages
You can pin a whole report page as a live page, so that any changes
you make in that report page will be reflected in the live page you
pinned to your dashboard.
You can do some google about what is power bi Live Report is

PowerBI Dataset and Report replacement

So, I created dataset that can be used to generate multiple reports and dashboards.
I would like to publish to the web portal and allow report designers to create their own reports and dashboards. Which works great until I need to update the model. If I update the model and push the data set via Publish function it deletes the reports.
So is the only option for everyone to use PowerBI Desktop? What is the web-based report designer for? Is this only for datasets that will never change?
If your Power BI file has reports in it, it will over write them. What I think is happening is that your users are updating the report in your dataset, for example adding a new tab, so when you load changes it overwrites them.
You need to decouple the Dataset from the reports. You can load your dataset with out any reports. You can then build reports using two methods.
1) Connect to the dataset using Power BI Desktop, using the connect to Power BI Dataset connection. That links to the dataset in a Live Connection, so you can build your reports from that. You can then publish your report. Any changes to the dataset will not overwrite it.
2) For the Web builder you can do the same, create a new report in the portal and select a dataset from that workspace to build your report. What the user needs to do then is 'Save as' and give that report as a new name.
Both methods just link to your dataset, not build a report directly in the file

Portability of Power Bi reports containing power bi datasets

I'm using Power bi service along with power bi desktop version.
What I'd like is to spend less time on setting up UI for my charts.
Let's say I have multiple accounts with power bi datasets in them (hybrid dataset to be able to display data in real-time).
Currently I have to create report on each of them, set up charts etc. I expected to create pbix file once and then just publish it to different accounts. But when it comes to reports bound with power bi datasets, it is no longer possible. Even if account already has exactly the same hybrid dataset.
Any ideas on how to implement portable reports?
If I got your point correctly, you have multiple accounts and in each of them you have the same dataset. You want to create open report, which you will publish to all of these accounts. I do not understand why do you need to create a new report for each of your accounts. Why not just change the data source of your report prior publishing it to each of these accounts?
Also it is not clear, how these datasets are created. I think there are two possible options here - these datasets are published with your report, or they are existing datasets not published with this report.
In the first case, just design your report, getting data from your database, and publish the report in each of your accounts. You could change the data source prior every publishing, if your different accounts/datasets should get data from different databases.
In the second case, when you design your report, do not get data from the database, but connect the report to the Power BI Service itself:
and pick the existing dataset:
Before each publish change the account you are logged in, change the data source of the report and select the dataset from the corresponding account. This way when publishing the report, the dataset will not be overwritten, but will be shared between this report and any other report who uses it.
To change the data source of your report, in the drop down of "Edit Queries" button, select "Data source settings" and then click "Change Source..." button.
In both ways you will design your report only once, but it will be published in different accounts using different data.
Are all of your users in the same tennant/company?
If so, create a workspace. Create your report which uses another power BI dataset as its source. Turn on row level permissions. Share the new report to all people. They will only see the data relevant to them and you will only need to maintain one report.
Row level security in power bi
I have used Power BI Service with Multiple Reports/Users in Same Organization with Shared Data Sources using different Reports for each user using the same Datasets.
From your Admin Account (eg. it#contoso.org) Publish all the Reports and once its working from Online (after configuring Gateway and DataSources). Download the PBIX Report File from Power BI Online.
Using Admin Account go to Dataset Settings and Allow the users who will use reports using this datasets to Publish Reports using this Dataset (further security to use dataset i.e. Even if they get the source PBIX File and upload it they wont get access to the data).
Login using the Users Power BI Account (must be within Same Organization, eg. contoso.org) then upload the Same PBIX Report File which was downloaded Earlier from Power BI Web Portal (do not publish via the Desktop App), its more efficient and cleaner on Accessing the Data through Web/Devices.
Now the reports as already they are using the same shared Datasets, the reports will be running fine and the data source settings only have to be done once from Admin User.
And for any further databases Administration only One Admin Account need to be used to access and modify the Data Source Settings.