Power BI Dataflow Circuit Breaker

Cute little Costa Rican Capuchin

Dataflow Refresh issues got you down?

Has this ever happened to you? Waking up to find out that a Power BI Dataflow that was scheduled overnight, didn’t happen? Even worse, what if you have a series of Power BI Dataflows (hierarchy) that rely on each other, 1 of them fails and the others don’t; Great, now your data is corrupted, <cue the Sad Trombone>

Then this is the solution for YOU!

Everyone knows that the best combination on Earth is Chocolate and Peanut Butter, that’s settled science.

BUT the Second Best combination is the Durable Function Monitor & Circuit Breaker patterns.

(Yes, it’s even slightly better than The Captain & Tennille)

Introducing the Dataflow Emergency Brake! (Github Repo)

How it Works:

The Azure Durable function orchestrator, implementing the Monitor Pattern, will run for a configurable amount of time and call an Activity function at Configurable intervals (polling). The Activity function uses the DataFlowService (a wrapper for the Power BI REST APIs) to Monitor and Manage the Dataflows. When any Dataflow fails, errors out, or hangs (doesn’t complete in a configurable amount of time) the Activity will either cancel all remaining Dataflows or will restart the Dataflow, depending on configuration.

Azure Durable Function Monitors Dataflows by polling

But Wait, There’s More!

Before you can call any Power BI REST API, you must include a Bearer Token in the header; otherwise, all calls will receive a 401 error (unauthorized)

AuthService.cs – Generates the Bearer Token required for every API call

Act now and we’ll throw in the Retry pattern for free!

Now that you have a bearer token, the Power BI REST APIs world is yours.

DataFlowServices.cs Provides the implementation for interacting with the Power BI REST APIs

  • GetDataFlows – Get all the Dataflows in a Workspace (groupid)
    • await _dataFlowServices.GetDataFlows();
  • GetDataFlowTransactions – Get all the Transactions in a Dataflow, the first one is the most recent
    • await _dataFlowServices.GetDataFlowTransactions(dataFlowId);
  • CancelDataFlow – Cancels a Dataflow
    • await _dataFlowServices.CancelDataFlow(dataFlowId, dataFlowTransactionId);
  • RefreshDataFlow – Restarts a Dataflow (Retry capability)
    • await _dataFlowServices.RefreshDataFlow(dataFlowId);

And that’s it!

In No time, you too can Monitor and Manage your Power BI Dataflows

Operators are standing by

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s