Skip to main content

Power BI

New

Enter a SQL Query by connecting to a .sql file

Vote (28) Share
Jared's profile image

Jared on 31 Mar 2017 00:33:54

Enter a SQL Query by connecting to a .sql file instead of explicitly typing the SQL.

This option would allow a developer the ability to maintain their SQL code in one place (instead of in Power Query and in the .sql file).

Currently, it is possible to point to a .sql file and upload, but this requires manipulation of M, and changing the privacy settings to Public. Or via the use of calling the external stored procedure xp_cmdshell which requires database permissions to be granted, and the ability to write a batch script.

Comments (2)
Jared's profile image Profile Picture

f94266fa 3fad-4353-ad0b-d4a8a1986084 on 05 Jul 2020 23:36:52

RE: Enter a SQL Query by connecting to a .sql file

For the record, anyone curious about the comment "it is possible with manipulation of M," here is one way it can be done:

let
SqlSource = Table.FromColumns({Lines.FromBinary(File.Contents("C:\Users\user\ExtractQuery_ForPowerBI.sql"), null, null, 1252)}),
#"Transposed Table" = Table.Transpose(SqlSource),
#"Merged Columns" = Table.CombineColumns(#"Transposed Table",Table.ColumnNames(#"Transposed Table"),Combiner.CombineTextByDelimiter("#(lf)", QuoteStyle.None),"Query"),
Source = Sql.Database("server_name_here", "database_name_here", [Query=#"Merged Columns"{0}[Query], CreateNavigationProperties=false])
in
Source



This works by transposing the rows (since reading a file source brings a well formatted query in as multiple rows), merges them with a linebreak as the delimiter (to avoid issues with comments ruining the code when all on one line), then uses that value as the query source.

Jared's profile image Profile Picture

71a215c6 c41e-4dc3-948b-f4baa8475330 on 05 Jul 2020 23:22:49

RE: Enter a SQL Query by connecting to a .sql file

Agree, need to link to the .Sql or whatever and have the Power BI. This way I can use the same query over and over and only store in one place for updating.