Forum Discussion
Embedded paginated report with PowerBI dataset
- 4 years ago
Hi JAnder ,
The way I am using for obtaining the dataset ID programatically is by calling "Reports - Get Datasources" API https://docs.microsoft.com/en-gb/rest/api/power-bi/reports/get-datasources-in-group the datasource representing the Power BI Dataset will have in the ConnectionDetails.Database something like
sobe_wowvirtualserver-<DatasetID> .Regarding code sample, I don't think there's a code sample for this specific case, but any sample for embedding RDL report should work, besides the change in generateToken request which should look similar to this: - 4 years ago
I posed a code sample here that shows how to get the embed token using the Microsoft.PowerBi.APi nuget: Solved: Re: Paginated Report embedding using a Power BI Da... - Microsoft Power BI Community
JAnder - For var identities I must pass a new EffectiveIdentity even if I was not using Row Level Secuity like this:
var identities: new List<EffectiveIdentity> {
// This first EffectiveIdentity is needed only if
// the Dataset uses Row Level Security
new EffectiveIdentity(
username: "[email protected]",
roles: new List<string> { "A Role" },
datasets: new List<string> { datasetId.ToString() }
),
new EffectiveIdentity(
username: "[email protected]" ,
reports: new List<string> { reportId.ToString() }
)
}
- JAnder4 years agoHelper II
I found that looking at the request on Fiddler gives more info that the exception shows. It actually didn't want my effective identity at all. I took out the identity and got the token.
{ "error": { "code": "InvalidRequest", "message": "Creating embed token for accessing dataset <removed> shouldn't have effective identity" } }- MichaelWash4 years agoHelper I
Can you show me your code?
- JAnder4 years agoHelper II
So it ends up looking like this and is working for now showing the reports. I should say I dont create the report or do the Power BI admin stuff, so there may be settings which now cause me to leave out the identity.
I did try using dynamic binding with this but it seems the token request always needs the datasetId used when creating the report. If I supply both (original and one I want to use) it seems to work but I only tested that against a dataset copy, needs more work to know if it is binding to correct dataset.
var reports = new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(report.Id) }; var datasets = new List<GenerateTokenRequestV2Dataset>() { new GenerateTokenRequestV2Dataset(datasetId, XmlaPermissions.ReadOnly) }; var workspaces = new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(groupId) }; var tokenRequest = new GenerateTokenRequestV2(datasets, reports, workspaces, null); var embedToken = client.EmbedToken.GenerateToken(tokenRequest); return embedToken;