Skip to content

Power BI Connector

The Power BI connector provides access to your Power BI environment with 5 live tools for exploring workspaces, datasets, reports, and dashboards, plus ETL ingestion that maps your BI topology into the knowledge graph.

Authentication

The connector authenticates using Azure AD service principal credentials (client credentials flow).

json
{
  "name": "Power BI",
  "source_type": "power_bi",
  "config": {
    "tenant_id": "00000000-0000-0000-0000-000000000000",
    "client_id": "11111111-1111-1111-1111-111111111111",
    "client_secret": "your-client-secret"
  }
}
VariableRequiredDescription
tenant_idYesAzure AD tenant ID
client_idYesAzure AD application (client) ID
client_secretYesAzure AD client secret
workspace_idNoLimit scope to a specific workspace (group) ID

TIP

Register an app in Azure AD with the Power BI Service permissions: Dataset.Read.All, Report.Read.All, Dashboard.Read.All, Workspace.Read.All. Enable the service principal in the Power BI Admin Portal under Tenant settings > Developer settings.

Live Tools (5)

ToolDescriptionArguments
powerbi_list_workspacesList all accessible workspacesfilter?
powerbi_list_datasetsList datasets in a workspaceworkspace_id
powerbi_list_reportsList reports in a workspaceworkspace_id
powerbi_list_dashboardsList dashboards in a workspaceworkspace_id
powerbi_get_datasetGet detailed info about a dataset including tables and refresh historyworkspace_id, dataset_id

Example: Agent Using Power BI Tools

User: "What datasets are in the Finance workspace?"

Agent: Let me check the Finance workspace.
→ Calls powerbi_list_workspaces(filter: "Finance")
→ Finds workspace_id: "ws-finance-123"
→ Calls powerbi_list_datasets(workspace_id: "ws-finance-123")
→ Returns: "The Finance workspace has 4 datasets:
  - Revenue Model (last refreshed: 2h ago, 12 tables)
  - Cost Allocation (last refreshed: 6h ago, 8 tables)
  - Budget vs Actual (last refreshed: 1d ago, 5 tables)
  - Cash Flow (last refreshed: 3h ago, 6 tables)"
User: "When was Revenue Model last refreshed?"

Agent: I'll get the refresh details.
→ Calls powerbi_get_dataset(workspace_id: "ws-finance-123", dataset_id: "ds-revenue-456")
→ Returns detailed refresh history, tables, and data sources

ETL Ingestion

When you trigger a sync, the Power BI connector ingests the following resources into the knowledge graph.

Nodes Created

Node LabelPropertiesPower BI Resource
PowerBIWorkspaceworkspace_id, name, type, state, is_read_onlyWorkspaces
PowerBIDatasetdataset_id, name, configured_by, is_refreshable, last_refresh, table_countDatasets
PowerBIReportreport_id, name, report_type, web_url, embed_url, dataset_idReports
PowerBIDashboarddashboard_id, display_name, web_url, embed_url, tile_countDashboards
PowerBIDataflowdataflow_id, name, description, configured_byDataflows

Relationships Created

RelationshipFromTo
CONTAINSPowerBIWorkspacePowerBIDataset
CONTAINSPowerBIWorkspacePowerBIReport
CONTAINSPowerBIWorkspacePowerBIDashboard
USES_DATASETPowerBIReportPowerBIDataset
DISPLAYSPowerBIDashboardPowerBIReport

Graph Queries

cypher
-- Find all reports and their underlying datasets
MATCH (r:PowerBIReport)-[:USES_DATASET]->(d:PowerBIDataset)
RETURN r.name AS report, d.name AS dataset, d.last_refresh

-- Find dashboards that display reports from multiple datasets
MATCH (dash:PowerBIDashboard)-[:DISPLAYS]->(r:PowerBIReport)-[:USES_DATASET]->(d:PowerBIDataset)
WITH dash, collect(DISTINCT d.name) AS datasets
WHERE size(datasets) > 1
RETURN dash.display_name, datasets

-- Map workspace contents
MATCH (w:PowerBIWorkspace)-[:CONTAINS]->(item)
RETURN w.name, labels(item)[0] AS type, count(item) AS count
ORDER BY w.name

Configuration Reference

json
{
  "name": "Power BI",
  "source_type": "power_bi",
  "config": {
    "tenant_id": "00000000-...",
    "client_id": "11111111-...",
    "client_secret": "...",
    "workspace_id": null
  }
}
FieldTypeDefaultDescription
tenant_idstringrequiredAzure AD tenant ID
client_idstringrequiredAzure AD application (client) ID
client_secretstringrequiredAzure AD client secret
workspace_idstring--Limit to a specific workspace ID

Troubleshooting

ErrorCauseFix
401 UnauthorizedInvalid or expired credentialsVerify tenant_id, client_id, and client_secret
403 ForbiddenService principal not enabled in Power BI AdminEnable service principal access in Power BI Admin Portal > Tenant settings
Workspace not foundInvalid workspace_id or no accessVerify the workspace ID and grant the service principal access
Dataset refresh failedData source credentials expiredRe-enter data source credentials in Power BI Service
Rate limit exceededToo many API callsReduce sync frequency or scope to specific workspaces

Built by AgentcyLabs. For in-house deployment or Agentcy Cloud (PaaS) access, visit agentcylabs.com.