Six hundred twenty-three service requests sat in a SharePoint list, and the new Dataverse app couldn’t see a single one. The service desk asked me to move them without copy-paste and keep the door open for scheduled updates.
In this tutorial, we’ll build a dataverse dataflow that loads that list into a new Dataverse table: create the dataflow, connect to SharePoint, trim columns in Power Query, map the table, set the refresh, and read the refresh history.
We’ll also cover standard vs analytical dataflows, loading into an existing table with an alternate key, incremental refresh and gateways.
Here’s what we’re building: one refresh that created all 623 rows with zero failures.

Before You Start
A dataflow is a saved Power Query job that runs in the cloud. Power Query is the same get-and-shape-data tool you know from Excel and Power BI. If Dataverse itself is new to you, start with what Microsoft Dataverse is.
You need maker rights in the environment and a license that includes Dataverse. Microsoft Learn notes that creating dataflows isn’t available with the Power Apps Developer Plan license. I built this in our Power Platform environment.
The source is the Service Requests list on /sites/SPGuides. It has 28 columns, but the app needs only five. Not sure the move is worth it? Our Dataverse vs SharePoint list comparison covers the trade-offs.
| SharePoint column | Dataverse column after mapping | Notes |
|---|---|---|
| Title | cr85a_Title (Text) | Becomes the primary name column |
| Status | cr85a_Status (Text) | For example In Progress |
| Priority | cr85a_Priority (Text) | For example Normal |
| Requester | cr85a_Requester (Text) | For example Adele Vance |
| DueDate | cr85a_DueDate (Date and time) | For example 01/15/2026 |
A sample row: “Badge access #1010”, In Progress, Normal, requested by Adele Vance, due 01/15/2026.
Standard or Analytical: Which Dataflow Do You Need?
The destination decides the type. A standard dataflow loads Dataverse tables, so Power Apps, Power Automate and model-driven apps can use the rows. An analytical dataflow stores data in Azure Data Lake storage for reporting.
| Standard | Analytical | |
|---|---|---|
| How to create | Power Apps: New dataflow (default) | Check Analytical entities only, or create it in Power BI |
| Stores data in | Dataverse tables | Azure Data Lake Storage |
| AI functions and computed tables | No | Yes |
| Default load | Incremental (adds and updates rows) | Full load |
| Used by | Any app that reads Dataverse | Mainly Power BI |
For an app, pick standard. For reports only, analytical is usually lighter. Our Dataverse and Power BI tutorial shows the reporting side.
Step 1: Create the Dataflow
First we give the dataflow a name and keep it standard.
- Go to make.powerapps.com and pick your environment in the top-right environment switcher.
- Select Dataflows in the left pane. If you don’t see it, select More and pin it.
- Select + New dataflow.
- Type the Name Service Requests from SharePoint. Leave Analytical entities only unchecked.
- Select Create.

Checkpoint: Power Query opens on the Choose data source page.
Step 2: Connect to the SharePoint List
Next, point Power Query at the list.
- Under New sources, select the SharePoint Online list tile. Excel workbook, Text/CSV, SQL Server and Dataverse sit next to it.
- In Site URL, paste the site root, such as https://yourtenant.sharepoint.com/sites/SPGuides. Don’t add the list path.
- Under Connection credentials, pick an existing connection or sign in. Ours shows Authentication kind: Organizational account. Select Next.


The navigator listed all 61 lists on the site. I searched for Service Requests, checked it, and the preview showed its 28 columns. Then I selected Transform data. If you only need a one-time copy, compare this with creating a Dataverse table from a SharePoint list.

Checkpoint: the Power Query editor opens with the Service Requests query.
Step 3: Shape the Data in Power Query
Fewer columns means a faster refresh and a cleaner table.
- Select the Title column header, then Shift+click DueDate to select Title, Status, Priority, Requester and DueDate.
- Right-click a selected header and choose Remove other columns.
- Check Applied steps: Source, Navigation 1, Removed other columns.

Power Query wrote this formula for the step. You can paste it into the formula bar to get the same result:
Table.SelectColumns(#"Navigation 1", {"Title", "Status", "Priority", "Requester", "DueDate"})

Want to see every step as code? Open the Advanced editor on the Home tab. Select Next when you’re done.
Checkpoint: the status bar shows Columns: 5.
Step 4: Map the Query to a New Dataverse Table
Now we tell the dataflow where the rows land.
- Under Load settings, choose Load to new table. The other options are Load to existing table and Do not load.
- Rename the table to SharePoint Service Request. The default name, Service Requests, clashed with a table we already had.
- Under Unique primary name column, change Auto-generated to Title.
- Leave Alternate key columns empty for this first load, and review the column mapping.

Watch the types. Title mapped to Multiline text until it became the primary name column, then it switched to Text. DueDate became Date and time. Building tables by hand instead? See how to create a table in Microsoft Dataverse.

Checkpoint: each source column has a cr85a_ destination column.
Step 5: Set the Refresh and Publish
The last page decides when the dataflow runs again.
- Choose Refresh manually for a one-time move, or Refresh automatically for a schedule.
- With automatic refresh, pick Frequency-based refresh (every n minutes in 30-minute steps, start time in UTC) or Refresh on specific days and times.
- Keep Send refresh failure notification to the dataflow owner checked.
- Select Publish.

We published with Refresh manually. Publishing starts the first refresh right away. If you need logic per row, such as lookups to other tables, a flow fits better; see how to import CSV data to Dataverse with Power Automate.
Checkpoint: the dataflow list shows Publish in progress, then a Last refresh time.
Test the Dataflow
Open the row’s … menu and select Show refresh history. The same menu has Refresh, Edit refresh settings, Edit incremental refresh and Create copy.

Our run started at 7:51:25 AM on 10/22/2026, was typed On demand, took 00:01:31 and Succeeded.

Open the run for details: “Refresh completed successfully for all tables in the dataflow”, with Rows created 623, Rows updated 0 and Failed rows 0. Then open Tables, find SharePoint Service Request, and check the data.

All 623 rows were there, such as Badge access #1010. From here a canvas app can get data from Dataverse in Power Apps like any other table.
Load into an Existing Table with an Alternate Key
Here’s the catch with our first load: without a key, every refresh creates new rows. Run it again and you’d get a second set of 623. A key turns the load into an upsert: update the row if the key matches, create it if not.
- Create an alternate key on the Dataverse table, using a column that is unique per row, like a request ID.
- In the dataflow, choose Load to existing table and pick the table.
- Select the key in the key dropdown, then map each source column.
- To keep the table in sync, check Delete rows that no longer exist in the query output.
That delete option needs the key, slows the refresh, and relies on the createdon and modifiedon columns. The primary name column isn’t a key; duplicates are allowed there. If you’d rather add rows another way, see how to add data to a Dataverse table.
Other Sources: Excel, CSV and On-Premises Data
The steps don’t change for files. Pick Excel workbook or Text/CSV, point to the file in OneDrive or SharePoint, choose the sheet, and map. For a quick one-off file, creating a Dataverse table from Excel or CSV is faster.
Data that isn’t in the cloud, like an on-premises SQL Server, needs an on-premises data gateway. You pick it in the connection settings. For Power Apps dataflows, you need admin rights granted on the gateway directly, not through a group.
Make It Production-Ready
- Set an alternate key before you turn on a schedule, or each refresh adds duplicates.
- Remember only the creator owns and can edit a dataflow. Use a shared service account for team dataflows.
- Incremental refresh (Store rows / Refresh rows from the past) needs a Power Apps per-app or per-user plan and a DateTime column that doesn’t change.
- Standard dataflows are bound by Dataverse service protection limits; failed records are retried up to three times.
- Build the table inside a solution so it moves cleanly; see our Dataverse solution guide.
Troubleshooting
Table name already exists. The default name came from the list, Service Requests, and clashed with our table. Rename it on the mapping page.
Can’t connect to the SharePoint list. Use the site root URL, with no list or folder path. A DLP policy that blocks HTTP with Microsoft Entra (preauthorized) also breaks the SharePoint connector.
“Connection to Dataverse failed”. Go to Connections, find Microsoft Dataverse (legacy), and select Fix connection.
Line breaks vanished. Dataflows strip them from multiline text. Status and Status Reason columns and polymorphic lookups can’t be mapped either.
Where to Take It Next
- React to new rows with the Power Automate Add a new row action or a refresh-complete trigger.
- Give each row a readable ID with an autonumber primary column in Dataverse.
More step-by-step builds are on our Power Apps tutorials hub.
If you’re working with Dataverse tables every day, these are worth a look next:
Frequently Asked Questions
What is a dataflow in Dataverse?
A dataflow is a cloud Power Query job that pulls data from a source, shapes it and loads it into Dataverse tables (a standard dataflow) or Azure Data Lake storage (an analytical dataflow), on demand or on a schedule.
How do I create a dataflow in Power Apps?
In make.powerapps.com select Dataflows > New dataflow, name it, choose a source, shape the data in Power Query, map it to a table, set the refresh and select Publish. Microsoft documents it in Create and use dataflows in Power Apps.
What’s the difference between standard and analytical dataflows?
Standard dataflows load Dataverse tables that apps and flows can use. Analytical dataflows (Analytical entities only) store data in Azure Data Lake storage and add AI functions and computed tables, mainly for Power BI.
Why does my dataflow create duplicate rows on every refresh?
There’s no key. Set an alternate key in the mapping so the dataflow upserts instead of creating rows. See Field mapping considerations for standard dataflows.
How often can a Dataverse dataflow refresh?
Manually, or automatically in 30-minute increments with a frequency-based schedule, or on specific days and times. Our 623-row SharePoint load took 00:01:31.

Hey! I’m Bijay Kumar, founder of SPGuides.com and a Microsoft Business Applications MVP (Power Automate, Power Apps). I launched this site in 2020 because I truly enjoy working with SharePoint, Power Platform, and SharePoint Framework (SPFx), and wanted to share that passion through step-by-step tutorials, guides, and training videos. My mission is to help you learn these technologies so you can utilize SharePoint, enhance productivity, and potentially build business solutions along the way.