Forum Discussion

jaymishra's avatar
jaymishra
Frequent Visitor
2 months ago
Solved

Cross-Workspace Report Embedding

I want to embed a cross-workspace report where the report resides in one workspace but references a dataset hosted in another workspace. I’d like to know whether the SDK provides a built-in way to ha...
  • Poojara_D12's avatar
    2 months ago

    Hi jaymishra 

    Yes, the Power BI JavaScript Client SDK has a built-in feature called Dynamic Binding designed exactly for this scenario. It allows you to load a single report layout from one workspace and bind it to a different dataset on the fly when embedding, meaning you don't have to hardcode anything or maintain duplicate report files.

    To use it, you just add the datasetBinding property directly to your client-side embed configuration object. The SDK will intercept the rendering phase and point the report's visuals to your target dataset ID at runtime.

    Here is the clean syntax to use in your JavaScript config:

    let config = {
        type: 'report',
        tokenType: models.TokenType.Embed,
        accessToken: accessToken, 
        embedUrl: embedUrl,       
        id: reportId,             // The ID of the report layout 
        
        // The built-in SDK property to dynamically bind your dataset
        datasetBinding: {
            datasetId: targetDatasetId // The ID of the dataset you want to reference
        }
    };
    
    // Embed the report into your container
    let report = powerbi.embed(reportContainer, config);

    When setting this up across workspaces, keep in mind that your backend code must generate an embed token that includes permissions for both the original report and the new target dataset. Also, the target dataset must share the exact same data schema (table and column names) as the original model the report was built against, or the visuals won't be able to map the data correctly.

     

     

  • DataTako's avatar
    2 months ago

    Building on the answers above, yes, this is exactly what the SDK's dynamic binding is for, so you don't hardcode anything.

     

    Two ways to do it dynamically:

    Set it at embed time via the datasetBinding property in your config (as Poojara showed), so the report layout from workspace A renders against the dataset in workspace B at runtime.
    Resolve the dataset ID first if you don't want to store it, call the REST API GET Reports/{reportId} (or Get Report In Group); the response includes the datasetId, which you then pass into the binding. That keeps everything driven by the report itself.


    Two things that usually trip people up here:

    Your embed token must cover both the report and the target dataset. Generate it with both IDs, otherwise you'll get an auth error at render.
    The target dataset has to match the schema (table/column names) of the model the report was built on, or the visuals won't map.


    Docs for reference: https://learn.microsoft.com/en-us/javascript/api/overview/powerbi/bind-report-datasets

     

    Hope that helps.

     

    Paco

    Founder DataTako