Power BI services brings great feature Deplyment Pipelines. You can separate your enviornments and synchoronize them in an easy way.

Every environment has it’s own workspace. You can name it whatever you want. Here is an example with one report created. Everything is in sync.


In March 2021 Power BI got new IF.EAGER DAX function. What is the difference between “new” and the “old” IF?

IF function is strict evaluated which computes TRUE or FALSE result only when condition is met.

For example: IF (5<2, 5+2, 7+1). Engine computes only the second part of T/F section (7+1), (5+2) isn’t computed.

IF.EAGER function is eager evaluated. Computes TRUE and FALSE results regardless the condition is met or not.

Example: IF(5<2, 5+2, 7+1). Engine computes first and second part of T/F section (5+2), (7+1).

Now, you can ask a question. Why we shoud use the second one?


Tooltip is a card containing informations defined in selected measures as values and tooltips.

Here is an example.


Today I show you three examples of deleting rows and it’s performance. I will compare deleting rows on non-partitioned table and truncating partition on partitioned table.

Our example is a table containing 0.75 billion records. [Date] range is 2000–01–01 to 2020–12–31.


Short story. You want to import file from Data Lake into Power BI.

I have three files in my Data Lake.


When you don’t want to load your model into memory, you use Direct Query mode. As you now, gap between in-memory and Direct Query performance can be immense. We can use Direct Query mode and attain good effectivness using Direct Query on Columnstore Clustered Indexed table.

I prepared two identical tables.


In many cases, when you share a report with your users. You want to allow them to enter parameters which influence on measures or indicators.

The perfect solution is What-if parameter.


Today, I show you, why you should pay attention on table data types. Here is an example.

Both tables contain 0.7 billion rows. The difference is a data type.

First table contains nvarchar data type.

CREATE TABLE [dbo].[GHCN](
[StationID] [nvarchar](50) NOT NULL,
[Date] [date] NOT NULL,
[Type] [nvarchar](50) NOT NULL,
[Value] [int] NOT NULL,
[Alpha2] [varchar](2) NULL
) ON [PRIMARY]

A second one includes varchar data type with decreased amount of characters.

CREATE TABLE [dbo].[GHCN2](
[StationID] [varchar](20) NOT NULL,
[Date] [date] NOT NULL,
[Type] [varchar](10) NOT NULL,
[Value] [int] NOT NULL,
[Alpha2] [varchar](2) NULL
) ON [PRIMARY]

At first glance…


When we deal with large datasets, data refreshing might take long time. No wonder, Power BI refreshes entire data set, even if any record hasn’t hanged. So, we can use incremental refresh functionality.

You can find how to configure incremental refresh in Microsoft Docs. It is pretty simple.

We campare time of refreshing dataset without incremental refresh and with incremental refresh.

My test dataset contains 6.5 milion rows and 3 columns.


Previos post described how to implement basic Row Level Security. If you need more flexibility you can use additional permission table.

Example data model has been described in the last post. This example has one difference. Additional table with permissions.

Michal Molka

BI Developer (Microsoft Stack)

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store