# Microsoft Power BI

> Work with the reports, semantic models and dashboards in your Power BI My workspace: push rows into a dataset from any workflow, run DAX queries and use the results, start and schedule refreshes, check refresh history, and clone, create or clean up reports and dashboards.

App · Analytics · 20 actions. Web page: https://docs.lodol.com/docs/integrations/powerbi

## Actions

### Add rows

Add rows to a push dataset's table: up to 10,000 per step, each an object of column name to value.

**Inputs**

- Push dataset (`dataset_id`, text, required): A push dataset in your My workspace, such as one made with 'Create a push dataset'. Pick one, or paste its id.
- Table name (`table_name`, text, required): The table's name in the push dataset, exactly as it was created.
- Rows (`rows`, list, required): The rows to add. Each row maps column names to values; dates as text, such as 07/30/2014.

**Outputs**

- `dataset_id` (text)
- `rows_added` (number)
- `table_name` (text)

**Example output**

```json
{
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "rows_added": 2,
  "table_name": "Sales"
}
```

### Clone a report

Copy a report within My workspace under a new name, optionally pointing the copy at a different semantic model. You need edit rights on the report, and Build permission on the other model if you choose one.

**Inputs**

- Report (`report_id`, text, required): A report in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.
- New report name (`name`, text, required): The name for the copy.
- Use a different semantic model (`target_dataset_id`, text): Leave blank to keep the original report's semantic model. Otherwise pick the model the copy should read.

**Outputs**

- `app_id` (text)
- `dataset_id` (text): The semantic model the report reads. Empty for paginated reports.
- `description` (text)
- `embed_url` (text)
- `format` (text): PBIR, PBIRLegacy or RDL.
- `id` (text): The report id.
- `is_owned_by_me` (true/false)
- `name` (text)
- `original_report_id` (text)
- `report_type` (text): PowerBIReport or PaginatedReport.
- `web_url` (text)

**Example output**

```json
{
  "app_id": null,
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "description": "",
  "embed_url": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715",
  "format": "PBIR",
  "id": "a9d1a8f4-7c21-4e4b-8d1e-5f0f6b1c2d3e",
  "is_owned_by_me": true,
  "name": "Sales overview (copy)",
  "original_report_id": null,
  "report_type": "PowerBIReport",
  "web_url": "https://app.powerbi.com/groups/me/reports/5b218778-e7a5-4d73-8187-f10824047715"
}
```

### Create a dashboard

Create an empty dashboard in My workspace. Pin tiles to it from reports in Power BI.

**Inputs**

- Dashboard name (`name`, text, required): The name shown in My workspace.

**Outputs**

- `app_id` (text)
- `embed_url` (text)
- `id` (text): The dashboard id.
- `is_read_only` (true/false)
- `name` (text)
- `web_url` (text)

**Example output**

```json
{
  "app_id": null,
  "embed_url": "https://app.powerbi.com/dashboardEmbed?dashboardId=69ffaa6c-b36d-4d01-96f5-1ed67c64d4af",
  "id": "69ffaa6c-b36d-4d01-96f5-1ed67c64d4af",
  "is_read_only": false,
  "name": "Weekly sales",
  "web_url": "https://app.powerbi.com/groups/me/dashboards/69ffaa6c-b36d-4d01-96f5-1ed67c64d4af"
}
```

### Create a push dataset

Create a semantic model in My workspace that you fill by adding rows from a workflow, with one table. Build reports on it in Power BI. Up to 75 columns.

**Inputs**

- Dataset name (`name`, text, required): The name shown in My workspace.
- Table name (`table_name`, text, required): The name of the dataset's table, up to 100 characters.
- Columns (`columns`, object, required): Each column's name and its data type: string, Int64, Double, bool or DateTime.
- Row retention (`retention_policy`, text): Whether old rows are dropped automatically. One of: `None` (Keep every row until it is deleted), `basicFIFO` (Keep a rolling window of the newest rows, dropping the oldest).

**Outputs**

- `default_retention_policy` (text)
- `id` (text): The new dataset's id.
- `name` (text)
- `table_name` (text)

**Example output**

```json
{
  "default_retention_policy": "None",
  "id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "name": "Sales",
  "table_name": "Sales"
}
```

### Delete a dashboard

Permanently delete a dashboard from My workspace. The reports its tiles came from are not affected.

**Inputs**

- Dashboard (`dashboard_id`, text, required): A dashboard in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.

**Outputs**

- `dashboard_id` (text)
- `deleted` (true/false)

**Example output**

```json
{
  "dashboard_id": "69ffaa6c-b36d-4d01-96f5-1ed67c64d4af",
  "deleted": true
}
```

### Delete a report

Permanently delete a report from My workspace. Its semantic model is not deleted.

**Inputs**

- Report (`report_id`, text, required): A report in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.

**Outputs**

- `deleted` (true/false)
- `report_id` (text)

**Example output**

```json
{
  "deleted": true,
  "report_id": "5b218778-e7a5-4d73-8187-f10824047715"
}
```

### Delete a semantic model

Permanently delete a semantic model (dataset) from My workspace. Reports built on it may stop working or be removed with it.

**Inputs**

- Semantic model (`dataset_id`, text, required): A semantic model (dataset) in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.

**Outputs**

- `dataset_id` (text)
- `deleted` (true/false)

**Example output**

```json
{
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "deleted": true
}
```

### Delete all rows in a table

Delete every row in a push dataset's table. The table and its columns stay. This cannot be undone and cannot delete only some rows.

**Inputs**

- Push dataset (`dataset_id`, text, required): A push dataset in your My workspace, such as one made with 'Create a push dataset'. Pick one, or paste its id.
- Table name (`table_name`, text, required): The table's name in the push dataset, exactly as it was created.

**Outputs**

- `cleared` (true/false)
- `dataset_id` (text)
- `table_name` (text)

**Example output**

```json
{
  "cleared": true,
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "table_name": "Sales"
}
```

### Get a report

Get one report: its name, type, link and the semantic model it reads from.

**Inputs**

- Report (`report_id`, text, required): A report in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.

**Outputs**

- `app_id` (text)
- `dataset_id` (text): The semantic model the report reads. Empty for paginated reports.
- `description` (text)
- `embed_url` (text)
- `format` (text): PBIR, PBIRLegacy or RDL.
- `id` (text): The report id.
- `is_owned_by_me` (true/false)
- `name` (text)
- `original_report_id` (text)
- `report_type` (text): PowerBIReport or PaginatedReport.
- `web_url` (text)

**Example output**

```json
{
  "app_id": null,
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "description": "",
  "embed_url": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715",
  "format": "PBIR",
  "id": "5b218778-e7a5-4d73-8187-f10824047715",
  "is_owned_by_me": true,
  "name": "Sales overview",
  "original_report_id": null,
  "report_type": "PowerBIReport",
  "web_url": "https://app.powerbi.com/groups/me/reports/5b218778-e7a5-4d73-8187-f10824047715"
}
```

### Get a semantic model

Get one semantic model (dataset): who configured it, when it was created, and whether it can be refreshed or take rows.

**Inputs**

- Semantic model (`dataset_id`, text, required): A semantic model (dataset) in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.

**Outputs**

- `add_rows_api_enabled` (true/false): True for a push dataset, which takes rows through 'Add rows'.
- `configured_by` (text)
- `create_report_embed_url` (text)
- `created_date` (text)
- `description` (text)
- `id` (text): The semantic model (dataset) id.
- `is_on_prem_gateway_required` (true/false)
- `is_refreshable` (true/false)
- `name` (text)
- `qna_embed_url` (text)
- `target_storage_mode` (text)
- `web_url` (text)

**Example output**

```json
{
  "add_rows_api_enabled": false,
  "configured_by": "ada@contoso.com",
  "create_report_embed_url": null,
  "created_date": "2026-09-21T09:00:00.000Z",
  "description": null,
  "id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "is_on_prem_gateway_required": false,
  "is_refreshable": true,
  "name": "Sales",
  "qna_embed_url": null,
  "target_storage_mode": "Abf",
  "web_url": "https://app.powerbi.com/groups/me/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229"
}
```

### Get refresh schedule

Get an imported semantic model's scheduled refresh: whether it is on, and on which days and at which times it runs.

**Inputs**

- Semantic model (`dataset_id`, text, required): A semantic model (dataset) in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.

**Outputs**

- `dataset_id` (text)
- `days` (list)
- `enabled` (true/false)
- `local_time_zone_id` (text)
- `notify_option` (text)
- `times` (list)

**Example output**

```json
{
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "days": [
    "Monday",
    "Thursday"
  ],
  "enabled": true,
  "local_time_zone_id": "UTC",
  "notify_option": "MailOnFailure",
  "times": [
    "07:00",
    "16:30"
  ]
}
```

### List dashboards

List the dashboards in your My workspace.

**Inputs**: None.

**Outputs**

- `count` (number): How many were returned.
- `dashboards` (list): The dashboards found.

**Example output**

```json
{
  "count": 1,
  "dashboards": [
    {
      "app_id": null,
      "embed_url": "https://app.powerbi.com/dashboardEmbed?dashboardId=69ffaa6c-b36d-4d01-96f5-1ed67c64d4af",
      "id": "69ffaa6c-b36d-4d01-96f5-1ed67c64d4af",
      "is_read_only": false,
      "name": "Weekly sales",
      "web_url": "https://app.powerbi.com/groups/me/dashboards/69ffaa6c-b36d-4d01-96f5-1ed67c64d4af"
    }
  ]
}
```

### List push dataset tables

List a push dataset's tables and their columns. Works on push datasets only; query an imported model with DAX instead.

**Inputs**

- Push dataset (`dataset_id`, text, required): A push dataset in your My workspace, such as one made with 'Create a push dataset'. Pick one, or paste its id.

**Outputs**

- `count` (number): How many were returned.
- `tables` (list): The dataset's tables.

**Example output**

```json
{
  "count": 1,
  "tables": [
    {
      "columns": [
        {
          "data_type": "string",
          "name": "Product"
        },
        {
          "data_type": "Double",
          "name": "Amount"
        }
      ],
      "description": null,
      "is_hidden": false,
      "name": "Sales"
    }
  ]
}
```

### List refresh history

List a semantic model's recent refreshes, newest first, with their status and any error. Power BI keeps between 20 and 60 entries, and none for models refreshed from OneDrive.

**Inputs**

- Semantic model (`dataset_id`, text, required): A semantic model (dataset) in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.
- How many (`top`, number): Return only the newest this many. Blank returns all kept. From 1 to 60.

**Outputs**

- `count` (number): How many were returned.
- `refreshes` (list): Recent refreshes, newest first.

**Example output**

```json
{
  "count": 1,
  "refreshes": [
    {
      "attempt_count": 1,
      "end_time": "2026-09-21T09:01:10.000Z",
      "refresh_type": "ViaApi",
      "request_id": "9399bb89-25d1-44f8-8576-136d7e9014b1",
      "service_exception_json": null,
      "start_time": "2026-09-21T09:00:00.000Z",
      "status": "Completed"
    }
  ]
}
```

### List report pages

List a report's pages in the order they appear.

**Inputs**

- Report (`report_id`, text, required): A report in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.

**Outputs**

- `count` (number): How many were returned.
- `pages` (list): The report's pages, in order.

**Example output**

```json
{
  "count": 1,
  "pages": [
    {
      "display_name": "Page 1",
      "name": "ReportSection",
      "order": 0
    }
  ]
}
```

### List reports

List the reports in your My workspace, including reports shared with you and reports from apps (their names start with [App]).

**Inputs**: None.

**Outputs**

- `count` (number): How many were returned.
- `reports` (list): The reports found.

**Example output**

```json
{
  "count": 1,
  "reports": [
    {
      "app_id": null,
      "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
      "description": "",
      "embed_url": "https://app.powerbi.com/reportEmbed?reportId=5b218778-e7a5-4d73-8187-f10824047715",
      "format": "PBIR",
      "id": "5b218778-e7a5-4d73-8187-f10824047715",
      "is_owned_by_me": true,
      "name": "Sales overview",
      "original_report_id": null,
      "report_type": "PowerBIReport",
      "web_url": "https://app.powerbi.com/groups/me/reports/5b218778-e7a5-4d73-8187-f10824047715"
    }
  ]
}
```

### List semantic models

List the semantic models (datasets) in your My workspace, imported models and push datasets alike.

**Inputs**: None.

**Outputs**

- `count` (number): How many were returned.
- `datasets` (list): The semantic models found.

**Example output**

```json
{
  "count": 1,
  "datasets": [
    {
      "add_rows_api_enabled": false,
      "configured_by": "ada@contoso.com",
      "create_report_embed_url": null,
      "created_date": "2026-09-21T09:00:00.000Z",
      "description": null,
      "id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
      "is_on_prem_gateway_required": false,
      "is_refreshable": true,
      "name": "Sales",
      "qna_embed_url": null,
      "target_storage_mode": "Abf",
      "web_url": "https://app.powerbi.com/groups/me/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229"
    }
  ]
}
```

### Refresh a semantic model

Start a refresh of an imported semantic model. Power BI runs it in the background; use 'List refresh history' to see how it went. On shared capacity (every Free and Pro workspace) a model can be refreshed at most eight times a day, counting scheduled refreshes. Push datasets cannot be refreshed.

**Inputs**

- Semantic model (`dataset_id`, text, required): A semantic model (dataset) in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.
- Email notification (`notify_option`, text): Whether Power BI emails you about this refresh. One of: `NoNotification` (Don't email anyone), `MailOnFailure` (Email me if it fails), `MailOnCompletion` (Email me when it finishes). Default: `NoNotification`.

**Outputs**

- `accepted` (true/false)
- `dataset_id` (text)
- `notify_option` (text)
- `request_id` (text): Matches request_id in 'List refresh history'.

**Example output**

```json
{
  "accepted": true,
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "notify_option": "NoNotification",
  "request_id": "9399bb89-25d1-44f8-8576-136d7e9014b1"
}
```

### Run a DAX query

Run one DAX query against a semantic model and get the rows back. Column names come back qualified, such as 'Sales[Amount]'. Limited to one table of 100,000 rows or 1,000,000 values. Your Power BI admin must have the tenant setting 'Dataset Execute Queries REST API' on.

**Inputs**

- Semantic model (`dataset_id`, text, required): A semantic model (dataset) in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.
- DAX query (`query`, text, required): A DAX query starting with EVALUATE (or DEFINE).
- Include empty values (`include_nulls`, true/false): Return blank cells as null instead of leaving the column out of that row. Default: `false`.

**Outputs**

- `columns` (list): The column names seen, in order.
- `row_count` (number)
- `rows` (list): One object per row, keyed by qualified column name.

**Example output**

```json
{
  "columns": [
    "Sales[Product]",
    "Sales[Amount]"
  ],
  "row_count": 1,
  "rows": [
    {
      "Sales[Amount]": 9.5,
      "Sales[Product]": "Widget"
    }
  ]
}
```

### Update refresh schedule

Change an imported semantic model's scheduled refresh. Only the fields you fill in change. Turning the schedule off changes nothing else, as Power BI requires. You must own the model, and shared capacity allows up to eight times a day.

**Inputs**

- Semantic model (`dataset_id`, text, required): A semantic model (dataset) in your My workspace. Pick one, or paste its id or its app.powerbi.com URL.
- Schedule (`enabled`, text): Turn the schedule on or off. Leave blank to keep it as it is. One of: `true` (Turn the schedule on), `false` (Turn the schedule off).
- Days (`days`, text): The days to refresh on. Leave blank to keep the current days. One or more of: `Monday`, `Tuesday`, `Wednesday`, `Thursday`, `Friday`, `Saturday`, `Sunday`.
- Times (`times`, text): The times of day to refresh, in the time zone below. Leave blank to keep the current times. One or more of: `00:00`, `00:30`, `01:00`, `01:30`, `02:00`, `02:30`, `03:00`, `03:30`, `04:00`, `04:30`, and 38 more.
- Time zone (`local_time_zone_id`, text): A Windows time zone id. Leave blank to keep the current one.
- Email on failure (`notify_option`, text): Whether the owner is emailed when a scheduled refresh fails. One of: `NoNotification` (Don't email anyone), `MailOnFailure` (Email the owner if a scheduled refresh fails).

**Outputs**

- `dataset_id` (text)
- `days` (list)
- `enabled` (true/false)
- `local_time_zone_id` (text)
- `notify_option` (text)
- `times` (list)

**Example output**

```json
{
  "dataset_id": "cfafbeb1-8037-4d0c-896e-a46fb27ff229",
  "days": [
    "Monday",
    "Thursday"
  ],
  "enabled": true,
  "local_time_zone_id": "UTC",
  "notify_option": "MailOnFailure",
  "times": [
    "07:00",
    "16:30"
  ]
}
```
