Forum Discussion
CI/CD inconsistency for Power Bi Reports
I'm trying to achieve the CI/CD using GitHub actions for deployments of lakehouse, semantic model and power bi reports.
My scenario:
1.I have the following workspaces "data-dev", bi-dev", "data-uat", "bi-uat"
2.I deployed lakehouse from workspace "data-dev" to "data-uat" and deployed semantic model and power bi reports from "bi-dev" to "bi-uat"
3. I'm noticing the deployment is succesful, however when I access the power bi reports, the data is not populating. It shows the page but it all has error details instead of real data and values.
Appreciate your help on this issue
Thak you it got fixed.
12 Replies
- ShivekMaharaj
Memorable Member
Hi mohan072,
I’d check the semantic model binding after the deployment before looking at the report itself.
If this is a Direct Lake semantic model over the Lakehouse, a successful item deployment does not necessarily mean the model is now pointing to the data-uat Lakehouse. Microsoft calls this out in the deployment pipeline guidance: Direct Lake semantic models can remain bound to the source-stage Lakehouse unless the data source is rebound for the target environment.
So after your GitHub Action runs, I would verify:
- Which Lakehouse the semantic model in bi-uat is actually connected to.
- Whether that Lakehouse is the one in data-uat, rather than data-dev.
- Whether the report in bi-uat is bound to the UAT semantic model and not the Dev model.
- Whether the UAT semantic model has the required permissions/connection to read the UAT Lakehouse.
Fabric also has dependency binding when items move between Git-connected workspaces, but the exact behaviour depends on the deployment method and whether Fabric can resolve the target dependency.
Kevin’s question above is therefore important too. If you can share whether the GitHub Action is using fabric-cicd, Fabric REST APIs, deployment pipeline APIs, or something else, that would narrow down where the binding needs to be handled.
If the report opens successfully but every visual is failing, I’d inspect those UAT item bindings first. A deployment can complete without the data dependency ending up where you expected it.
AI-assisted drafting: AI was used to help structure and phrase this response. I reviewed and validated the technical content before posting.
- mohan072Regular Visitor
Hi Shivek,
Thank you for responding and assistance. I'm using Fabric REST APIs to achieve the deployments to UAT environment.
1. I verified that deployed semantic model in bi-uat is connected to lakehouse in data-uat and there were no warnings too. During the run time, it automatically replaces ( using powershell) the workspace id and lakehouse id with actual ids of uat. Hence it is showing the right lakehouse of uat.
2. I verified too the report in bi-uat is bound to UAT semantic model. I used the below command to check and it shows the correct listings.
fab api -A powerbi "groups/${{ vars.UAT_BI_WORKSPACE_ID }}/reports" --show_headers
3. I'm using Managed Identity that has contributor access to both workspaces which are data-uat and bi-uat.
4. Yes I'm using a single yml file that has two jobs, job-1 will deploy semantic model, refresh semantic model, sleep for 30 sec, and job-2 executes and will deploy reports.
I think I may be missing something for this report behaviour, but could not identify where exactly this is causing the issue.
Just to give you my current deployment process. The CI (build) is, it will just create and upload the entire code as artifact
The CD (deploy) is, it will download the artifact and replaces the workspace id and lakehouse ids of dev with UAT ids and then performs the deployments.
Appreciate your help if there is anything that I could check to bring down the issue to closure.
- mohan072Regular Visitor
Hi Shivek - Thank you for responding and assistance.
I'm using Fabric REST APIs (fab deploy) to achieve the deployments to UAT environment.
1. I verified that the deployed semantic model in bi-uat is connected to lakehouse in data-uat and there exists no warnings too
2. I did perform the following command to check if the report is bound to semantic model in bi-uat and yes it is connected to the right semantic model
fab api -A powerbi "groups/${{ vars.UAT_WORKSPACE_ID }}/reports" --show_headers
3. We use only a single YML file that has 2 jobs, job-1 will deploy semantic model, refreshes semantic model. Job-2 will deploy reports.
4.I'm using Managed Identity that has contributor access to both workspaces, data-uat and bi-uat.
Just to give you the current process approach. The CI (build) is, will upload the code as artifact. The CD (deploy) is, will download the artifact, replace the workspace id and lakehouse id of dev with UAT ids and deploy
I'm not able to identify which is causing this issue, but I believe there is something thatbis causing this issue.
Appreciate your help if there is anything I could check to fix this issue.
- mohan072Regular Visitor
Hi Shivek - Thank you for responding and assistance.
I'm using Fabric REST APIs (fab deploy) to achieve the deployments to UAT environment.
1. I verified that the deployed semantic model in bi-uat is connected to lakehouse in data-uat and there exists no warnings too
2. I did perform the following command to check if the report is bound to semantic model in bi-uat and yes it is connected to the right semantic model
fab api -A powerbi "groups/${{ vars.UAT_WORKSPACE_ID }}/reports" --show_headers
3. We use only a single YML file that has 2 jobs, job-1 will deploy semantic model, refreshes semantic model. Job-2 will deploy reports.
4.I'm using Managed Identity that has contributor access to both workspaces, data-uat and bi-uat.
Just to give you the current process approach. The CI (build) is, will upload the code as artifact. The CD (deploy) is, will download the artifact, replace the workspace id and lakehouse id of dev with UAT ids and deploy
I'm not able to identify which is causing this issue, but I believe there is something thatbis causing this issue.Appreciate your help if there is anything I could check to fix this issue.
- v-aatheeque
Community Support
Hi mohan072
Following up to confirm if the earlier responses addressed your query. If not, please share your questions and we’ll assist further.
- mohan072Regular Visitor
Hey - This is fixed. The problem is that I was checkign with user does not have enough of permissions
- KevinChant
Super User
w are you performing the actions with GitHub Actions, are you using Merge API's or something like the fabric-cicd Python library?
- mohan072Regular Visitor
Hi Shivek - Thank you for responding and assistance. Please find the below.
I'm using Fabric REST APIs (fab deploy) to achieve the deployments to UAT environment.
1. I verified that the deployed semantic model in bi-uat is connected to lakehouse in data-uat and there exists no warnings too
2. I did perform the following command to check if the report is bound to semantic model in bi-uat and yes it is connected to the right semantic model
fab api -A powerbi "groups/${{ vars.UAT_WORKSPACE_ID }}/reports" --show_headers
3. We use only a single YML file that has 2 jobs, job-1 will deploy semantic model, refreshes semantic model. Job-2 will deploy reports.
4.I'm using Managed Identity that has contributor access to both workspaces, data-uat and bi-uat.
Just to give you the current process approach. The CI (build) is, will upload the code as artifact. The CD (deploy) is, will download the artifact, replace the workspace id and lakehouse id of dev with UAT ids and deploy
I'm not able to identify which is causing this issue, but I believe there is something thatbis causing this issue.Appreciate your help if there is anything I could check to fix this issue.
- mohan072Regular Visitor
Hi ShivekMaharaj Thank you for respnding and questions. Please find the below
I'm using Fabric REST APIs (fab deploy) to achieve the deployments to UAT environment.
1. I verified that the deployed semantic model in bi-uat is connected to lakehouse in data-uat and there exists no warnings too
2. I did perform the following command to check if the report is bound to semantic model in bi-uat and yes it is connected to the right semantic model
fab api -A powerbi "groups/${{ vars.UAT_WORKSPACE_ID }}/reports" --show_headers
3. We use only a single YML file that has 2 jobs, job-1 will deploy semantic model, refreshes semantic model. Job-2 will deploy reports.
4.I'm using Managed Identity that has contributor access to both workspaces, data-uat and bi-uat.
Just to give you the current process approach. The CI (build) is, will upload the code as artifact. The CD (deploy) is, will download the artifact, replace the workspace id and lakehouse id of dev with UAT ids and deploy
I'm not able to identify which is causing this issue, but I believe there is something thatbis causing this issue.Appreciate your help if there is anything I could check to fix this issue.
- ShivekMaharaj
Memorable Member
Hi mohan072,
Thanks, that helps. If the semantic model in bi-uat is definitely connected to the Lakehouse in data-uat, and the report is also bound to the correct UAT semantic model, then I would stop looking at binding for now.
The next thing I would isolate is whether the semantic model itself is healthy after deployment.
Since you are using the REST APIs, one thing worth checking is the refresh sequencing. A semantic model refresh request is asynchronous, so the API call succeeding does not necessarily mean the refresh has finished successfully. Microsoft documents this under enhanced refresh with the Power BI REST API.
I would make sure Job 2 does not deploy the reports until the UAT semantic model refresh status has actually reached Completed, rather than just continuing after the refresh request was accepted.
I would also try a very simple DAX query directly against the UAT semantic model using the Execute Queries REST API.
Something as simple as:
EVALUATE TOPN(10, 'YourTable')If that fails, then the report is probably only exposing a semantic model/data-access problem underneath it.
If the DAX query succeeds but the report visuals still fail, then I would compare the deployed report definition with Dev next, because at that point the model, Lakehouse connection and data path have all been proven independently.
One other thing I would check if this is Direct Lake is the identity being used when the model queries the Lakehouse. Microsoft notes that Direct Lake access can depend on either the report user having ReadData on the Lakehouse or the semantic model using a fixed identity with access to the source. Simply giving the CI/CD identity Contributor access does not necessarily prove that the runtime query identity has access. The Fabric permission model.
So my next three checks would be:
- Confirm the semantic model refresh actually reaches Completed.
- Execute a simple DAX query directly against the UAT semantic model.
- If it is Direct Lake, verify the runtime identity/connection has access to the UAT Lakehouse.
That should tell us whether the failure is still in the semantic model layer or genuinely only in the deployed report.AI-assisted drafting: AI was used to help structure and phrase this response. I reviewed and validated the technical content before posting.
- mohan072Regular Visitor
Thak you it got fixed.