Forum Discussion
Blank value in button slicer
Hi all,
I have a semantic model (storage mode direct lake on onelake) in Fabric.
I have a pbi report connected to it. The model is as follows:
dim_Customer
fact_Contract
fact_Invoice
Customer is connected to both fact tables using the Customer_ID. Customer has a B2B/B2C field. The field is never blank.
When I drop the field on a button slicer (the 'new slicer' visual), a third (blank) value appears. I know about the blank row, and how it appears when you have missing mappings, or so-called 'invalid' relationships. The blank row is actually 'created' by the model, and not natively present in my customer table. I know that because, when I remove the relationships, the blank value disappears. Nevertheless, I am a 100% convinced there is no mismapping...proof is the DAX query that returns zero rows for either fact table (see screenshot). When I drop the field in a table or matrix visual, the blank row does not show (but that could be default behaviour), but when I drop it in a button slicer it does. Any explenation for this? I know I can filter the slicer, but I want my model to be clean and this drives me pretty nuts đ
Thx in advance for your appreciated support.
10 Replies
- cengizhanarslan
Super User
It is called "Referential Integtrity", you have Primary Key fields in your fact table that are not available in your Dim table. Even if dim_Customer[B2B/B2C] has no blanks, Power BI will create a blank/unknown row on the dimension side when any fact row canât be matched to a customer.
The best fix here would be correcting your Dim table, but if you cant you can enable the option below which would force the relationship work as INNER JOIN instead LEFT JOIN.
- Ritaf1983
Super User
Hi JS23
What youâre seeing is actually the expected behavior, and the explanation is already implicit in your description.
If a (Blank) value appears in a slicer that is based on a dimension column, it means that from the modelâs perspective there are fact rows that do not successfully resolve to a value in that dimension at query time. There is no other logical mechanism in the engine that creates a blank member âout of thin airâ.
This does not require:
a physically blank value in dim_Customer
or an obviously broken relationship
It does require:
fact rows whose Customer_ID cannot be matched to dim_Customer in the current evaluation context (orphaned fact rows, late-arriving dimensions, deleted customers, subtle key issues, etc.).
Why this is confusing:
Tables and matrices often suppress the blank row by default.
The new button slicer explicitly exposes the full logical domain of the column, including the auto-generated blank member created by the model.
In Direct Lake / Fabric this is especially visible, because the engine evaluates relationships very strictly and directly against the data.
The fact that a DAX query starting from the dimension returns zero rows does not disprove this â slicers are driven by the fact-side domain, not by VALUES(dim[Column]).
If (Blank) appears in the slicer, there are fact rows that do not map to the dimension. There isnât another explanation.
If you want help locating them, you can identify the mismatches explicitly (e.g. fact keys not present in the dimension), or share a repro/model and someone can help pinpoint the exact rows.
If this post helps, then please consider Accepting it as the solution to help the other members find it more quickly
- krishnakanth240
Super User
Hi JS23
It is an expected behavior and not a data issue. Power BI creates an internal unknown (blank) member on dimension side whenever a table is related to fact tables. New button slicer shows the full domain (including this hidden blank) while tables/matrices suppress it by default even when there are no rows
Create a clean slicer column and use it in the slicer
Customer Type (Clean) = IF( ISBLANK(dim_Customer[B2B/B2C]), BLANK(), dim_Customer[B2B/B2C] )
Also, if valid for the model enable Assume Referential Integrity on the relationship.
- maruthisp
Super User
Hi JS23,
You can do below:1.Remove Blank Using visual-level filters
2.Replace Blank with a Label (âUnknownâ, âNot Assignedâ)CategoryNameFiltered =IF (ISBLANK ( 'Category'[CategoryName] ),"Unknown",'Category'[CategoryName])
Please let me know if you have any further questions or need clarifications.If this reply helped solve your problem, please consider clicking "Accept as Solution" so others can benefit too. And if you found it useful, a quick "Kudos" is always appreciated, thanks!
Best Regards,
Maruthi
LinkedIn - http://www.linkedin.com/in/maruthi-siva-prasad/
X - Maruthi Siva Prasad - (@MaruthiSP) / X
- JS23Frequent Visitor
That would not sovle my issue, at least, I would be hiding future missing values like that
- danextian
Super User
Hi JS23
Two possible causes are: the related column on the many side of the relationship contains blank values, or there are values on the many side that do not exist in the dimension table. For example, the date table may only include dates for 2025, while the fact table contains rows with missing dates or dates outside of 2025.
- JS23Frequent Visitor
Hi,
unfortunately neither of them is true. If that were the case, the dax query I shared in the screenshots would contain a number on the row with the blank value, right?
When I imported the tables locally into PBI, and then recreated the semantic model, all was fine. So the conclusion is this is related to the storage mode. This is MS Servicedesk explenation:
Basically they say it's related to the way slicers work together with directlake models. Their suggested solution is to use referential integrity, but I disagree that this is a solution, as it will hide potential mapping issues in the future.
Below their answer:Analysis and Resolution:
- You contacted Microsoft Power BI Support request for the issue where Blank value appears in slicer.
- You agreed on the same note and confirmed to close this ticket as you do not have any further questions/concerns.
- We initially joined over the screen call and discussed the issue as below.
After discussing the issue with my internal SMEs, they have shared the following information based on initial investigation.
This behavior is caused by how Direct Lake semantic models materialize metadata for slicer visuals.
In Direct Lake mode, the engine may internally surface an implicit blank member during slicer enumeration. This blank value:
- Does not necessarily correspond to an actual blank or unmapped row in the data
- Does not appear in DAX antiâjoins or relationship validation queries
- Can be introduced due to how OneLake / Delta metadata, string normalization, or internal relationship evaluation is handled at query time
Additionally, Button Slicers fully enumerate dimension members and are more likely to surface such internal blank members compared to dropdown slicers.
This behavior is specific to Direct Lake models and does not typically occur in Import (VertiPaq) models.
As per the details provided by them, I can coincidence the same with the issue you have experienced.
When in import mode we do not see any blanks appear in the Slicer Visuals.
Also below is a Microsoft community post similar to the issue and they have suggested to Select the referential integrity button when creating the relationship.
Solved: (Blank) in slicer - Microsoft Fabric Community
Assume Referential Integrity Setting in Power BI Desktop - Power BI | Microsoft Learn
- We followed up on the suggestions and you mentioned the workaround is not so ideal for your scenario and since it is an expected behaviour you gave closure confirmation on the same.
- v-pnaroju-msft
Community Support
Thankyou, Ritaf1983, krishnakanth240, maruthisp, pcoley, cengizhanarslan and danextian for your responses.
Hi JS23,We appreciate your efforts in sharing the details of the Support team discussion, which will be beneficial to other members of the community. As mentioned by them, at present, this is the expected behavior.
Please continue to utilise the Microsoft Fabric community for any further queries.
Thank you.
- JS23Frequent Visitor
All of these answers refer to the expected behaviour of blank row being created by the semantic model in case where we have a key value on the fact table that is missing on the dim table. I understand that, it's the basic 'blank row' concept. But if that were the case, then I should see at least one row being counted for the blank value (see screenshot).
Conclusion: there is no missing value on the dim side...all is properly mapped? Do you agree.
Things get even more interesting: I just connected a blank PBI report to the same warehouse tables, imported them, and recreated the semantic model locally. And the blank row is no longer there. So this leads me to believe that the issue lies within the storage mode (direct lake on Onelake)?