I am new to Power BI and although I am also new to SQL, I am trying to use them together. I finally figured out how to create parameters and how to apply the parameter (during the query editing?). But I simply do not understand why I went through the effort of creating a query list and filtering at the start, versus filtering during visualization. What I have read all seems very convoluted. I'd greatly appreciate if someone can break it down for me in layman's term. Thank you.
Solved! Go to Solution.
The short answer is because it's usually way faster.
When you create parameters and apply them during query editing, the parameters are (typically) "folded" back to the server. That is, when your query is executed on the server it includes the parameter information. This typically reduces the size of the result set sent back to PBI, and since SQL Server is optimized for SQL (as opposed to PBI which can't really be specialized for a particular data source), the filtering operation is completed much more quickly. Those two factors mean less waiting around for you, assuming you have more than a trivial amount of data to process.
A quick example to illustrate. Imagine executing the following two SQL queries:
`select * from MY_TABLE where MY_COL='foo'`
`select * from MY_TABLE`
Obviously, the second query has the potential to send back a lot more information to PBI. Of course, you could apply the "where MY_COL='foo'" operation in PBI after pulling all the unfiltered data back. But by doing that you're likely going to be pulling a lot more information over the wire, and you're also going to be relying on PBI to filter your SQL data, which is going to be a lot slower than if you had pushed the filter operation to the server and let it do the filter for you.
Adding to AdamBQ's post, you are able to use parameter in Power BI Desktop to filter different sources excepting filtering rows in tables.
For example, as you use SQL Server, you can define server/database/table parameters in Power BI Desktop, which allows you import data from different servers/databases/tables dynamically.