Skip to content
Power BI · Power Automate

Docs contents

Business and custom data

Send Power BI values with Power Automate

Run a saved dataset query in your organization’s flow and deliver the result to a Denframe webhook.

You’ll have

A 15-minute sales summary from Power BI: a Revenue block and an Attainment block on a private dashboard, updated each time the flow runs.

You’ll need
  • A Power BI semantic model you can query, and a Power Automate account with access to it.
  • An approved HTTPS delivery route to Denframe (see Prepare the receiving address), plus entitlement for the HTTP action or your organization’s gateway or custom connector.
  • A dashboard whose audience allows Private values. Live tenant and gateway compatibility must be checked in your deployment.

Follow these steps in your own Denframe. This website never connects to your household, your accounts or your devices, and never asks for your credentials.

  1. Create the webhook source

    In Studio, open Sources, then Custom. Choose Add a custom source; the sheet asks where the data comes from.

    Choose Power BI. This opens the webhook connection with Producer set to Power BI / Power Automate, so new values start as Private.

    Paste the sample below into Sample JSON from the data field, choose Choose fields from sample, map Revenue and Attainment, and choose Preview selected values. Keep Expected delivery interval (seconds) at 900.

    Denframe setup sample
    {
      "revenue": 124500,
      "attainment_pct": 83,
      "currency": "EUR"
    }

    Tick a dashboard whose audience allows Private values under Show on and choose Add source. Copy the Delivery address and the Delivery token (shown once) before choosing Done.

    Denframe won’t silently broaden a dashboard’s audience when attaching Private values. A localhost address is not reachable from Power Automate cloud.

  2. Build the scheduled flow

    Create a scheduled cloud flow with a 15-minute Recurrence trigger. Serialize runs if needed, so newer data isn’t overtaken by an older concurrent run.

    Add Power BI, Run a query against a dataset. Sign in, select the Workspace and Dataset, and enter the synthetic DAX query below. It returns one row without needing existing measures.

    Synthetic DAX query
    EVALUATE ROW("Revenue", 124500, "AttainmentPct", 83)

    Test the action and inspect the returned row, including the exact bracketed column names. For production, replace the constants with measures defined in your model.

  3. Pick out the first row

    Add a Compose action named SummaryRow. In its Expression tab, use the expression below. If your query action has a different internal name, update the reference, and confirm firstTableRows exists in its actual output before using it.

    SummaryRow expression
    first(body('Run_a_query_against_a_dataset')?['firstTableRows'])

    Don’t continue to delivery on a failed query, an empty row, missing numbers or an embedded query error. Inspect the query action’s response in the test run rather than substituting zero.

  4. Compose the envelope

    Add another Compose action named DenframeEvent with the object below. Insert the expressions with the designer’s Expression controls so revenue and attainment stay numbers. The example uses the query action name from the previous step; check the names against your flow.

    DenframeEvent object · Power Automate expressions
    {
      "schema_version": 1,
      "event_id": "@{workflow()['run']['name']}",
      "produced_at": "@{utcNow()}",
      "data": {
        "revenue": "@outputs('SummaryRow')?['[Revenue]']",
        "attainment_pct": "@outputs('SummaryRow')?['[AttainmentPct]']",
        "currency": "EUR"
      }
    }
  5. Send it to Denframe

    Add the approved HTTP action: Method POST, URI the copied delivery address, Content-Type application/json, and Authorization Bearer followed by the delivery token. Take the token from protected configuration and protect inputs and outputs in the flow history.

    Set Body to the Outputs of DenframeEvent. For a gateway deployment, use your organization’s configured custom connector with the same envelope and bearer header; a normal cloud HTTP action doesn’t use a gateway by itself.

    Retry the delivery action with the already composed DenframeEvent. Don’t regenerate utcNow() or the payload for each HTTP retry.

  6. Check it worked

    Run the flow once. Check that data.revenue is the JSON number 124500, not a quoted string, and that the source’s Recent deliveries lists an accepted event. Both blocks show their values on the dashboard. Then turn on the recurrence.

If it doesn’t work

The dataset query is denied

Check semantic-model access and the tenant’s Execute Queries policy with your Power BI administrator.

firstTableRows or a column is missing

Inspect the query action output and use its actual action name and row keys. The DAX example returns [Revenue] and [AttainmentPct].

The flow succeeds but Denframe still waits

Check the delivery action, address and token separately from the query. A successful Power BI query alone delivers nothing to Denframe.

You can’t expose an approved receiving route

Use the direct Power BI connection if your organization permits it; Denframe then makes the outbound requests.

Official references

Related guides