> ## Documentation Index
> Fetch the complete documentation index at: https://docs.modulex.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Microsoft Power BI Integration for AI Agents & Workflows

> Business intelligence and analytics platform for interactive visualizations, reports, and dashboards

{/* Self-hosted logo — build-time vendored from modulex.json / Iconify (see scripts/lib/logo.js). */}

<img src="https://mintcdn.com/modulexaillc/df8MOr-hXotYLTh5/logos/microsoft-power-bi.svg?fit=max&auto=format&n=df8MOr-hXotYLTh5&q=85&s=7a740cfeeb34f1493ed72607a579954c" alt="Microsoft Power BI logo" width="72" height="72" data-path="logos/microsoft-power-bi.svg" />

## Overview

Add **Microsoft Power BI** to any ModuleX agent or workflow. Business intelligence and analytics platform integration against the Power BI REST API (`api.powerbi.com/v1.0/myorg`).

<Info>
  **Categories**: Analytics & Data · Business Intelligence · Analytics · Productivity · **Auth**: OAuth2 (Microsoft Entra ID) · **Actions**: 10
</Info>

## Authentication

### OAuth2 (Microsoft Entra ID)

Connect using Microsoft OAuth2 (recommended)

#### Required Credentials

| Field         | Description                                       | Required | Format |
| ------------- | ------------------------------------------------- | -------- | ------ |
| Client ID     | Microsoft Entra ID App Registration Client ID     | Yes      | `-`    |
| Client Secret | Microsoft Entra ID App Registration Client Secret | Yes      | `-`    |

#### OAuth Configuration

* **Authorization URL**: `https://login.microsoftonline.com/common/oauth2/v2.0/authorize`
* **Token URL**: `https://login.microsoftonline.com/common/oauth2/v2.0/token`
* **Scopes**: `https://analysis.windows.net/powerbi/api/.default`, `offline_access`

## Available Actions

<AccordionGroup>
  <Accordion title="add_rows_to_push_dataset — Append rows to a table in a Power BI Push Dataset">
    ### Parameters

    <ResponseField name="dataset_id" type="string" required>
      ID of the Push Dataset (use list\_datasets to find IDs)
    </ResponseField>

    <ResponseField name="table_name" type="string" required>
      Exact case-sensitive name of the table within the dataset
    </ResponseField>

    <ResponseField name="rows" type="string" required>
      JSON array of row objects matching the table column schema
    </ResponseField>

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "rows_added": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Rows Added"
        }
      },
      "required": [
        "success"
      ],
      "title": "AddRowsToPushDatasetOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="execute_dax_query — Execute a DAX query against a Power BI dataset">
    ### Parameters

    <ResponseField name="dataset_id" type="string" required>
      ID of the dataset to query (use list\_datasets to find IDs)
    </ResponseField>

    <ResponseField name="query" type="string" required>
      DAX expression starting with EVALUATE
    </ResponseField>

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    <ResponseField name="include_nulls" type="boolean">
      Whether to include null values in the response (Default: `true`)
    </ResponseField>

    <ResponseField name="impersonated_user_name" type="string">
      UPN of an effective identity for Row-Level Security
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "results": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Results",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ExecuteDaxQueryOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="export_report — Export a Power BI report to PDF, PPTX, PNG, or other file format (Premium only)">
    ### Parameters

    <ResponseField name="report_id" type="string" required>
      ID of the report to export (use list\_reports to find IDs)
    </ResponseField>

    <ResponseField name="format" type="string">
      Output format: PDF, PPTX, PNG, CSV, XLSX, DOCX, XML, MHTML (Default: `PDF`)
    </ResponseField>

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    <ResponseField name="poll_interval_seconds" type="integer">
      Seconds between export status polls (Default: `5`)
    </ResponseField>

    <ResponseField name="poll_timeout_seconds" type="integer">
      Maximum seconds to wait for export completion (Default: `300`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "export_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Export Id"
        },
        "status": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Status"
        },
        "report_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Report Id"
        },
        "format": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Format"
        },
        "resource_file_extension": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Resource File Extension"
        },
        "resource_location": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Resource Location"
        },
        "file_size_bytes": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "File Size Bytes"
        },
        "file_base64": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "File Base64"
        },
        "percent_complete": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Percent Complete"
        }
      },
      "required": [
        "success"
      ],
      "title": "ExportReportOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_refresh_history — Get the refresh history for a Power BI dataset">
    ### Parameters

    <ResponseField name="dataset_id" type="string" required>
      ID of the dataset (use list\_datasets to find IDs)
    </ResponseField>

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    <ResponseField name="top" type="integer">
      Number of most recent refresh entries to return (max 200)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "refreshes": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Refreshes",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetRefreshHistoryOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="get_reports_by_id — Retrieve metadata for a single Power BI report by ID">
    ### Parameters

    <ResponseField name="report_id" type="string" required>
      Power BI report ID (GUID)
    </ResponseField>

    <ResponseField name="group_id" type="string">
      Workspace group ID (omit for My workspace)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "web_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Web Url"
        },
        "embed_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Embed Url"
        },
        "dataset_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Dataset Id"
        },
        "report_type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Report Type"
        }
      },
      "required": [
        "success"
      ],
      "title": "GetReportsByIdOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_dashboards — List Power BI dashboards in a workspace">
    ### Parameters

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "dashboards": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Dashboards",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListDashboardsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_datasets — List Power BI datasets (semantic models) in a workspace">
    ### Parameters

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "datasets": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Datasets",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListDatasetsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_reports — List Power BI reports in a workspace">
    ### Parameters

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "reports": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Reports",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListReportsOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="list_workspaces — List Power BI workspaces accessible to the authenticated user">
    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "workspaces": {
          "items": {
            "additionalProperties": true,
            "type": "object"
          },
          "title": "Workspaces",
          "type": "array"
        }
      },
      "required": [
        "success"
      ],
      "title": "ListWorkspacesOutput",
      "type": "object"
    }
    ```
  </Accordion>

  <Accordion title="refresh_dataset — Trigger a refresh of a Power BI dataset">
    ### Parameters

    <ResponseField name="dataset_id" type="string" required>
      ID of the dataset to refresh (use list\_datasets to find IDs)
    </ResponseField>

    <ResponseField name="workspace_id" type="string">
      ID of the workspace (omit for My workspace)
    </ResponseField>

    <ResponseField name="notify_option" type="string">
      Email notification behavior: NoNotification, MailOnCompletion, MailOnFailure (Default: `NoNotification`)
    </ResponseField>

    ### Response

    ```json theme={null}
    {
      "additionalProperties": false,
      "properties": {
        "success": {
          "title": "Success",
          "type": "boolean"
        },
        "error": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Error"
        },
        "status_code": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Status Code"
        },
        "request_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Request Id"
        },
        "dataset_id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Dataset Id"
        },
        "location": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Location"
        }
      },
      "required": [
        "success"
      ],
      "title": "RefreshDatasetOutput",
      "type": "object"
    }
    ```
  </Accordion>
</AccordionGroup>

## Limits & Quotas

* Power BI REST API is rate-limited per user/app; exact limits depend on capacity (shared vs Premium).
* Dataset refreshes: Pro allows up to 8/day; Premium allows up to 48/day.
* DAX query execution timeout: 5 minutes server-side.
* Export API: Premium-only; exports may take minutes for large reports.
* Error model: non-2xx responses are caught and returned as `success=False` + `error` rather than raising.

## Related integrations

<CardGroup cols={3}>
  <Card title="Databricks" href="/integrations/tools/databricks" />

  <Card title="Google Tag Manager" href="/integrations/tools/google-tag-manager" />

  <Card title="Mixpanel" href="/integrations/tools/mixpanel" />
</CardGroup>

## Links

* [Microsoft Power BI](https://powerbi.microsoft.com)
