Learn from the best! Meet the four finalists headed to the FINALS of the Power BI Dataviz World Championships! Register now
I have a simple M script in a Data Flow. When I run a query with INSERT in SQL, it adds the row as I would expect. But I perform the same thing in my Data Flow, and just refreshing the preview causes it to add 3 rows for each row that is added in my insert statement.
Is there any way to make it only run once? Is there any way to make it perform a check before inserting so that even though it writes 3 times, only one gets saved by the SQL database?
let
query = "INSERT INTO ...",
dbWrite = Sql.Database(server, database, [Query=query, CreateNavigationProperties=false]),
in
dbWrite
Do. Not. Do. That.
Power Query was never designed to write into anything except a Semantic Model.
There is NO guarantee that your Power Query will run only once. Most of the time it will not.
Chris Webb's BI Blog: Why Does Power BI Query My Data Source More Than Once? (crossjoin.co.uk)
Repeat: Do. Not. Do. That.
If I shouldn't take this approach, is there any other way to save Dataflow Power Query results to a SQL database?
Don't use either Dataflows or Power Query. Use a proper ETL tool like SSIS, or Informatica. There is no need to drag Power BI into your data movement process.
If you are planning to use Fabric as a data storage this story becomes slightly different. Dataflows Gen 2 are designed to write into the Fabric lakehouse etc.
| User | Count |
|---|---|
| 24 | |
| 19 | |
| 11 | |
| 10 | |
| 8 |
| User | Count |
|---|---|
| 42 | |
| 36 | |
| 20 | |
| 18 | |
| 16 |