Appearance
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"
}
}| Variable | Required | Description |
|---|---|---|
tenant_id | Yes | Azure AD tenant ID |
client_id | Yes | Azure AD application (client) ID |
client_secret | Yes | Azure AD client secret |
workspace_id | No | Limit 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)
| Tool | Description | Arguments |
|---|---|---|
powerbi_list_workspaces | List all accessible workspaces | filter? |
powerbi_list_datasets | List datasets in a workspace | workspace_id |
powerbi_list_reports | List reports in a workspace | workspace_id |
powerbi_list_dashboards | List dashboards in a workspace | workspace_id |
powerbi_get_dataset | Get detailed info about a dataset including tables and refresh history | workspace_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 sourcesETL Ingestion
When you trigger a sync, the Power BI connector ingests the following resources into the knowledge graph.
Nodes Created
| Node Label | Properties | Power BI Resource |
|---|---|---|
PowerBIWorkspace | workspace_id, name, type, state, is_read_only | Workspaces |
PowerBIDataset | dataset_id, name, configured_by, is_refreshable, last_refresh, table_count | Datasets |
PowerBIReport | report_id, name, report_type, web_url, embed_url, dataset_id | Reports |
PowerBIDashboard | dashboard_id, display_name, web_url, embed_url, tile_count | Dashboards |
PowerBIDataflow | dataflow_id, name, description, configured_by | Dataflows |
Relationships Created
| Relationship | From | To |
|---|---|---|
CONTAINS | PowerBIWorkspace | PowerBIDataset |
CONTAINS | PowerBIWorkspace | PowerBIReport |
CONTAINS | PowerBIWorkspace | PowerBIDashboard |
USES_DATASET | PowerBIReport | PowerBIDataset |
DISPLAYS | PowerBIDashboard | PowerBIReport |
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.nameConfiguration Reference
json
{
"name": "Power BI",
"source_type": "power_bi",
"config": {
"tenant_id": "00000000-...",
"client_id": "11111111-...",
"client_secret": "...",
"workspace_id": null
}
}| Field | Type | Default | Description |
|---|---|---|---|
tenant_id | string | required | Azure AD tenant ID |
client_id | string | required | Azure AD application (client) ID |
client_secret | string | required | Azure AD client secret |
workspace_id | string | -- | Limit to a specific workspace ID |
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
401 Unauthorized | Invalid or expired credentials | Verify tenant_id, client_id, and client_secret |
403 Forbidden | Service principal not enabled in Power BI Admin | Enable service principal access in Power BI Admin Portal > Tenant settings |
Workspace not found | Invalid workspace_id or no access | Verify the workspace ID and grant the service principal access |
Dataset refresh failed | Data source credentials expired | Re-enter data source credentials in Power BI Service |
Rate limit exceeded | Too many API calls | Reduce sync frequency or scope to specific workspaces |