Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

The ultimate Microsoft Fabric, Power BI, Azure AI & SQL learning event! Join us in Las Vegas from March 26-28, 2024. Use code MSCUST for a $100 discount. Register Now

Reply
MichaelWash
Helper I
Helper I

Paginated Report embedding using a Power BI Dataset - How to pass the xmlaPermissions parameter?

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?

 

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

 

View solution in original post

2 REPLIES 2
chan_kevin
New Member

I have tried to get the EmbedToken by referring to this example:

 

PowerBI-Developer-Samples/PbiEmbedService.cs at master · microsoft/PowerBI-Developer-Samples · GitHu...

 

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

 

Helpful resources

Announcements
Fabric Community Conference

Microsoft Fabric Community Conference

Join us at our first-ever Microsoft Fabric Community Conference, March 26-28, 2024 in Las Vegas with 100+ sessions by community experts and Microsoft engineering.

February 2024 Update Carousel

Power BI Monthly Update - February 2024

Check out the February 2024 Power BI update to learn about new features.

Fabric Career Hub

Microsoft Fabric Career Hub

Explore career paths and learn resources in Fabric.

Fabric Partner Community

Microsoft Fabric Partner Community

Engage with the Fabric engineering team, hear of product updates, business opportunities, and resources in the Fabric Partner Community.