Power BI to CSV — 3 export methods — row limits explained
Export Power BI to CSV Visual export, Service download and API.
Three ways to get data out of Power BI as CSV — right-click visual export, Power BI Service download and Power Automate automation. Row limits explained (150k summarised, 30k underlying) with practical workarounds for larger datasets.
Desktop & Service
3 export methods
Row limits & workarounds
Power Automate flow
Always free
Choose your export method Power BI
The fastest method — works in both Power BI Desktop and Power BI Service. No admin permissions required beyond access to the report.
1
Hover over the visual
In Power BI Desktop or Service, hover over any table, matrix or chart visual. A toolbar appears at the top right of the visual.
2
Click … → Export data
Click the three-dot menu (…) in the visual toolbar → Export data. If this option is greyed out, it has been disabled by a Power BI admin — see the FAQ below.
3
Choose data type and format
Select Summarized data (aggregated as shown in the visual) or Underlying data (row-level detail). Choose .csv or .xlsx as the file format.
4
Click Export
The file downloads immediately to your browser's default download folder. For large visuals, the download may take a few seconds.
Row limits: Summarized data — up to 150,000 rows. Underlying data — up to 30,000 rows. For larger exports see the workarounds section below.
Export from a published report in Power BI Service (app.powerbi.com). Works on any device with a browser — no desktop app required.
1
Open the report in Power BI Service
Navigate to app.powerbi.com → Workspaces → your workspace → open the published report.
2
Export the visual
Same as Desktop: hover over a visual → … → Export data → CSV. The row limit is the same: 150,000 summarised, 30,000 underlying.
3
Export the full report to Excel (alternative)
From the report menu: Export → Export to Excel. This generates an .xlsx file with the report data in PivotTable format — convert to CSV using CSVShift's Excel to CSV tool.
4
Download from a dataflow or dataset
In Power BI Service: Datasets + dataflows → find your dataset → click … → Download this dataset (.pbix). For table-level exports, use Power Automate (see next tab).
Tip: Apply filters to the report page before exporting to get a subset of the data within the row limit. Slicers and page-level filters affect the exported rows.
Power Automate can run a Power BI query and export the results to CSV on a schedule — bypassing the manual visual export row limit.
1
Create a new flow in Power Automate
Go to make.powerautomate.com → Create → Scheduled cloud flow. Set the recurrence (daily, weekly, etc.).
2
Add Power BI → Run a query against a dataset
Add action: Power BI → Run a query against a dataset. Select your workspace and dataset. Enter a DAX query to extract the data you need.
3
Convert results and save to SharePoint / OneDrive
Add action: Data Operations → Create CSV table from the query results. Then add SharePoint → Create file or OneDrive → Create file to save the CSV.
4
Send by email (optional)
Add Outlook → Send an email with the CSV as an attachment. The flow runs automatically on your schedule — no manual clicks.
DAX query limit: Power Automate's "Run a query against a dataset" returns up to 100,000 rows by default. For larger exports use the Power BI REST API directly.
Export methods compared
Choose based on row count, automation needs and whether you have admin access.
Method
Row limit
Automated?
Needs admin?
Best for
Visual export (summarized)
150,000 rows
✗ Manual
✗
Quick one-off exports, aggregated data
Visual export (underlying)
30,000 rows
✗ Manual
✗
Row-level detail from a specific visual
Power Automate
100,000 rows
✓ Scheduled
⚠ Connector licence
Recurring scheduled CSV exports
Power BI REST API
No hard limit
✓ Scriptable
⚠ App registration
Large datasets, developer workflows
Connect from Excel / Python
No limit
✓ Scriptable
✗
Full dataset access via XMLA endpoint
Exceeding the row limit — workarounds
The 150k / 30k limits catch most users eventually. Four practical routes around them.
Use a Table visual
Add a Table visual showing the columns you need at full granularity. Export data → Underlying data gives up to 30,000 rows. For more, paginate: add a filter, export, shift the filter range, repeat. Slow but no admin access needed.
Python via XMLA endpoint
Power BI Premium / PPU exposes an XMLA endpoint. Connect with msal and pandas: authenticate, run a DAX query, convert to DataFrame, save as CSV. No row limit. Requires a Premium workspace.
Query the source directly
Export from the underlying data source instead of Power BI — SQL database, SharePoint list, Azure SQL. Use CSVShift or your database client to export the full table. This bypasses all Power BI limits.
Power BI REST API
Use POST /datasets/{id}/executeQueries with a DAX query. Returns JSON — convert to CSV with Python or Power Shell. Requires an Azure App Registration and Power BI API permissions.
Power BI REST API — Python export
Full data extract via the executeQueries endpoint — no row limit.
Python — authenticate and run DAX query
import msal, requests, pandas as pd
from io import StringIO
# ── Configuration ──────────────────────────────────
TENANT_ID = "your-tenant-id"
CLIENT_ID = "your-app-client-id"
CLIENT_SECRET= "your-app-secret"
DATASET_ID = "your-dataset-id" # from Power BI dataset URL
# ───────────────────────────────────────────────────
# Authenticate
app = msal.ConfidentialClientApplication(
CLIENT_ID,
authority=f"https://login.microsoftonline.com/{TENANT_ID}",
client_credential=CLIENT_SECRET
)
token = app.acquire_token_for_client(
scopes=["https://analysis.windows.net/powerbi/api/.default"]
)["access_token"]
# Run DAX query
dax = "EVALUATE 'YourTable'" # replace with your table name
url = f"https://api.powerbi.com/v1.0/myorg/datasets/{DATASET_ID}/executeQueries"
resp = requests.post(
url,
headers={"Authorization": f"Bearer {token}"},
json={"queries": [{"query": dax}], "serializerSettings": {"includeNulls": True}}
)
# Parse and save
rows = resp.json()["results"][0]["tables"][0]["rows"]
df = pd.DataFrame(rows)
df.to_csv("powerbi_export.csv", index=False)
print(f"Exported {len(df):,} rows")
Requires: pip install msal requests pandas. Create an Azure App Registration with Power BI API → Dataset.ReadAll permission. Grant admin consent in Azure AD.
When do you need Power BI to CSV?
Sharing data with non-Power BI users
Colleagues without Power BI licences can't access published reports. Exporting a visual's data to CSV and sharing the file lets them analyse the data in Excel or Google Sheets without needing access to the report.
Feeding downstream systems
Power BI is often the aggregation layer over multiple source systems. Exporting aggregated metrics to CSV lets downstream tools — Python scripts, ETL pipelines, database staging tables — consume the Power BI output without a direct API connection.
Scheduled reporting
Finance and operations teams need weekly or monthly data extracts from Power BI dashboards. Power Automate flows run on schedule, extract the data and deliver it as a CSV email attachment — no manual export each week.
Ad hoc analysis
Power BI's visual layer is optimised for dashboards, not ad hoc data exploration. Exporting filtered data to CSV and loading into Python or R gives full analytical flexibility — joins, custom aggregations, statistical models — that Power BI's DAX doesn't easily support.
export power bi to csvhow to export power bi table to csvexport data from power bi to csvpower bi export csvexport power bi data to csvpower bi download csvpower bi export underlying data csvpower bi csv row limitpower bi export more than 150000 rowspower automate export power bi csv
Three methods, row limits and real workarounds. Not just right-click.
Most guides for exporting Power BI data stop at "right-click → Export data". CSVShift covers the full picture: why the 150k/30k limits exist, what happens when Export data is greyed out, how Power Automate's scheduled export works, and when to bypass Power BI entirely and query the source system directly.
The REST API example using MSAL authentication and executeQueries is the path for developers who need full-table access without row limits — the approach Power BI's own documentation buries in five separate pages.
Three methods tabbed
Visual export, Service download and Power Automate — step by step with the exact UI paths.
Row limits explained
150k summarised, 30k underlying, 100k via Automate — with four practical workarounds.
REST API Python code
Full MSAL auth + executeQueries + pandas export — copy and run for unlimited row exports.
Free, no conditions
No account, no upload. Funded by display advertising only.
Frequently asked questions
How do I export data from Power BI to CSV?
Hover over a visual in Power BI Desktop or Service → click … → Export data → choose Summarized or Underlying data → select CSV → click Export. The row limit is 150,000 for summarized data and 30,000 for underlying data.
What is the Power BI CSV export row limit?
Summarized data: 150,000 rows. Underlying data: 30,000 rows. Power Automate executeQueries: 100,000 rows. Power BI REST API: no hard limit. To export more than 150k rows, use Power Automate, the REST API, or query the source data system directly.
Why is Export data greyed out in Power BI?
Three common causes: 1) A Power BI admin has disabled export in tenant settings — contact your admin. 2) The report author disabled it: File → Options → Report settings → Export data. 3) Row Level Security (RLS) is preventing the underlying data export. Check with your Power BI admin which setting applies.
How do I automate a Power BI CSV export on a schedule?
Use Power Automate: create a Scheduled cloud flow → add Power BI → Run a query against a dataset → Data Operations → Create CSV table → save to SharePoint or OneDrive. The flow runs automatically on your schedule. See the Power Automate tab in the guide above for the full steps.