Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Microsoft announced:
Support Power BI dataset as a data source for embedding paginated reports
It indicates:
When embedding a paginated report with a Power BI dataset as a datasource for the embed for your customers scenario, you need a service principal and a multi-resource embed token, that contains a new parameter called “XMLA permissions”. Using this parameter, ISVs and customers can control the access to XMLA endpoints with the embed token. For allowing embedding of paginated report with a Power BI dataset as a datasource a “Read Only” value is required.
That leads to this example, that requires a xmlaPermissions parameter. Can anyone provide any example code that does that?
Solved! Go to Solution.
This code works:
public EmbedToken GetEmbedToken(PowerBIClient pbiClient, Guid reportId, Guid datasetId, Guid targetWorkspaceId)
{
EmbedToken embedToken = new EmbedToken();
try
{
// Create a request for getting Embed token
// This method works only with new Power BI V2 workspace experience
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>()
{ new GenerateTokenRequestV2Report(reportId) },
datasets: new List<GenerateTokenRequestV2Dataset>()
{ new GenerateTokenRequestV2Dataset(datasetId.ToString(), "ReadOnly") },
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() {
new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
identities: new List<EffectiveIdentity> {
// This first EffectiveIdentity is needed only if
// the Dataset uses Row Level Security
new EffectiveIdentity(
username: "user@user.com",
roles: new List<string> { "A Role" },
datasets: new List<string> { datasetId.ToString() }
),
new EffectiveIdentity(
username: "user@user.com" ,
reports: new List<string> { reportId.ToString() }
)
}
);
// Generate Embed token
embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}
catch (Exception ex)
{
string errorMessage = ex.GetBaseException().Message;
}
return embedToken;
}
I have tried to get the EmbedToken by referring to this example:
I created the PowerBIclient object in main function without problem, then pass into this function:
public void GetEmbedToken(PowerBIClient pbiClient, Guid reportId, Guid datasetId, Guid targetWorkspaceId)
{
try
{
// Create a request for getting Embed token
// This method works only with new Power BI V2 workspace experience
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
datasets: new List<GenerateTokenRequestV2Dataset>() { new GenerateTokenRequestV2Dataset(datasetId.ToString()) },
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null
);
// Generate Embed token
var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}
catch (Exception ex)
{
string errorMessage = ex.GetBaseException().Message;
}
//return embedToken;
}
However, error returned when generate the token: Operation returned an invalid status code 'BadRequest'
Does any one has any idea?
This code works:
public EmbedToken GetEmbedToken(PowerBIClient pbiClient, Guid reportId, Guid datasetId, Guid targetWorkspaceId)
{
EmbedToken embedToken = new EmbedToken();
try
{
// Create a request for getting Embed token
// This method works only with new Power BI V2 workspace experience
var tokenRequest = new GenerateTokenRequestV2(
reports: new List<GenerateTokenRequestV2Report>()
{ new GenerateTokenRequestV2Report(reportId) },
datasets: new List<GenerateTokenRequestV2Dataset>()
{ new GenerateTokenRequestV2Dataset(datasetId.ToString(), "ReadOnly") },
targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() {
new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
identities: new List<EffectiveIdentity> {
// This first EffectiveIdentity is needed only if
// the Dataset uses Row Level Security
new EffectiveIdentity(
username: "user@user.com",
roles: new List<string> { "A Role" },
datasets: new List<string> { datasetId.ToString() }
),
new EffectiveIdentity(
username: "user@user.com" ,
reports: new List<string> { reportId.ToString() }
)
}
);
// Generate Embed token
embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);
}
catch (Exception ex)
{
string errorMessage = ex.GetBaseException().Message;
}
return embedToken;
}
Check out the September 2024 Power BI update to learn about new features.
Learn from experts, get hands-on experience, and win awesome prizes.
User | Count |
---|---|
40 | |
4 | |
4 | |
3 | |
3 |