Forum Discussion
Data to be merged on Visual Level
- Anonymous8 months ago
Hi srlabhe ,
Thank you for your follow-up. The visual appearing blank in this scenario is expected and not an issue with Fabric or Power BI. This happens because the ChangeLabel measure uses SELECTEDVALUE from both the start and end date slicers. If either slicer doesn't have a single date selected, SELECTEDVALUE returns blank, making the measure blank for all rows and causing the table visual to appear empty. This only occurs after the measure is added.
To address this, use disconnected date tables for the start and end date slicers. If the slicers are connected to the main table, data is filtered out before the measure runs, preventing it from accurately determining if a record is new, deleted, modified, or unchanged between snapshots. Disconnected slicers keep the full dataset visible, allowing the measure to compare the two dates directly.
It's also important that the measure never returns blank. It should handle cases where one or both slicers aren't selected and return a meaningful value, so the visual stays visible. When both dates are selected, the measure can then determine the status of each ID. This approach keeps the table from disappearing.
If you want to let users filter by change type (like New or Modified), use a separate measure as a visual level filter instead of relying on the label measure alone. This way, the table remains populated even if no change type is selected.
Thank you.
For Interactive & filterable Change column, do below steps:
1) Create disconnected date slicer tables
(If you already have date tables used elsewhere, create two tiny disconnected tables just for the slicers.)
Modeling → New table:
StartDate = CALENDAR( DATE(2015,1,1), DATE(2030,12,31) )
EndDate = CALENDAR( DATE(2015,1,1), DATE(2030,12,31) )
Or create them however you prefer.
2) Create simple ChangeType table (for slicer)
Modeling → New table:
ChangeType = DATATABLE("Change", STRING, { {"New"}, {"Deleted"}, {"No Change"}, {"Modify"} })
Put a slicer on ChangeType[Change].
3) Add the main measure: ChangeLabel
Create a measure in your model (adjust names to match your table/columns; I use YourView, SnapshotDate, ID, idnamekey — replace as needed):
ChangeLabel =
VAR vStart = SELECTEDVALUE( StartDate[Date] )
VAR vEnd = SELECTEDVALUE( EndDate[Date] )
VAR vID = SELECTEDVALUE( 'YourView'[ID] )
// Determine presence in Start/End snapshots
VAR inStart =
CALCULATE(
COUNTROWS( 'YourView' ),
ALL( 'YourView' ),
'YourView'[SnapshotDate] = vStart,
'YourView'[ID] = vID
) > 0
VAR inEnd =
CALCULATE(
COUNTROWS( 'YourView' ),
ALL( 'YourView' ),
'YourView'[SnapshotDate] = vEnd,
'YourView'[ID] = vID
) > 0
// Grab the idnamekey or comparable value to detect change
VAR startKey =
CALCULATE(
MAX( 'YourView'[idnamekey] ),
ALL( 'YourView' ),
'YourView'[SnapshotDate] = vStart,
'YourView'[ID] = vID
)
VAR endKey =
CALCULATE(
MAX( 'YourView'[idnamekey] ),
ALL( 'YourView' ),
'YourView'[SnapshotDate] = vEnd,
'YourView'[ID] = vID
)
RETURN
SWITCH(
TRUE(),
inEnd && NOT inStart, "New",
inStart && NOT inEnd, "Deleted",
inStart && inEnd && endKey = startKey, "No Change",
inStart && inEnd && endKey <> startKey, "Modify",
BLANK()
)
Notes:
>> ALL('YourView') removes the visual filter so the measure can explicitly target the SnapshotDate rows.
>> If idnamekey may be BLANK or duplicates exist, you can change the aggregation used (e.g., CONCATENATEX or other logic).
>> Replace 'YourView' and column names with your actual table & column names.
4) Add filter measure: IsInSelectedChange
Create this measure and use it as a visual-level filter (set to is 1) on your table visual.
IsInSelectedChange =
VAR selChange = SELECTEDVALUE( ChangeType[Change] ) // value selected in ChangeType slicer
VAR rowChange = [ChangeLabel] // the computed change label for the row
RETURN
IF(
ISBLANK(selChange) || ISBLANK(rowChange),
1, // if no change selected or row has no label, keep it visible
IF(rowChange = selChange, 1, 0)
)
Final Fix:
>> Put ID, Name, idnamekey (or whatever columns) into a table visual.
>> Add the ChangeLabel measure into the visual (so it shows as a column).
>> In the Visual → Filters area, add IsInSelectedChange and set it to is 1.
>> Now the ChangeType slicer behaves like a normal filter — selecting New or Modify will filter the table to those rows.
>> Show both Name_Start and Name_End if you want to display old vs new values — create them with CALCULATE(MAX(...), FILTER(...)) pulling from the Start and End snapshots like the logic used above.
>> If you want to show a friendly message if Start/End not selected, show a card with IF(OR(ISBLANK(vStart), ISBLANK(vEnd)), "Please pick Start and End", ...).
>> Make sure both StartDate/EndDate slicers are single-select (so the measures return a single date).
=================================================================
Did I answer your question? Mark my post as a solution! This will help others on the forum!
Appreciate your Kudos!!
Jaywant Thorat | MCT | Data Analytics Coach
Linkedin: https://www.linkedin.com/in/jaywantthorat/
Join #MissionPowerBIBharat = https://shorturl.at/5ViW9
#MissionPowerBIBharat
LIVE with Jaywant Thorat from 15 Dec 2025
8 Days | 8 Sessions | 1 hr daily | 100% Free
- srlabhe9 months ago
Super User
The step where I am adding Chang Lable measure in Table visual everything goes blank
- Jaywant-Thorat9 months ago
Super User
Improvised Version
Step 1 — Modify ChangeLabel to avoid full BLANK output:
ChangeLabel =
VAR vStart = SELECTEDVALUE(StartDate[Date])
VAR vEnd = SELECTEDVALUE(EndDate[Date])
VAR vID = SELECTEDVALUE('YourView'[ID])
-- If slicers not selected, keep table visible
IF(
ISBLANK(vStart) || ISBLANK(vEnd),
"Select dates",
VAR inStart =
CALCULATE(
COUNTROWS('YourView'),
ALL('YourView'),
'YourView'[SnapshotDate] = vStart,
'YourView'[ID] = vID
) > 0
VAR inEnd =
CALCULATE(
COUNTROWS('YourView'),
ALL('YourView'),
'YourView'[SnapshotDate] = vEnd,
'YourView'[ID] = vID
) > 0
VAR startKey =
CALCULATE(
MAX('YourView'[idnamekey]),
ALL('YourView'),
'YourView'[SnapshotDate] = vStart,
'YourView'[ID] = vID
)
VAR endKey =
CALCULATE(
MAX('YourView'[idnamekey]),
ALL('YourView'),
'YourView'[SnapshotDate] = vEnd,
'YourView'[ID] = vID
)
RETURN
SWITCH(
TRUE(),
inEnd && NOT inStart, "New",
inStart && NOT inEnd, "Deleted",
inStart && inEnd && endKey = startKey, "No Change",
inStart && inEnd && endKey <> startKey, "Modify",
"No Data"
)
)
Step 2 — Add this measure for filtering:
IsInSelectedChange =
VAR sel = SELECTEDVALUE(ChangeType[Change])
VAR row = [ChangeLabel]
RETURN
IF(
ISBLANK(sel),
1,
IF(row = sel, 1, 0)
)
90% of the time, the reason is your StartDate or EndDate slicer has no selection → SELECTEDVALUE is blank → measure returns BLANK → visual disappears
With the updated measure, this problem will solve permanently.
=================================================================
Did I answer your question? Mark my post as a solution! This will help others on the forum!
Appreciate your Kudos!!
Jaywant Thorat | MCT | Data Analytics Coach
Linkedin: https://www.linkedin.com/in/jaywantthorat/
- Jaywant-Thorat9 months ago
Super User
Checklist (VERY IMPORTANT)
Your table will go blank if ANY of these are wrong:
- StartDate slicer must be disconnected table
- EndDate slicer must be Disconnected table
- StartDate slicer selection must be Single date
- EndDate slicer selection must be Single date
- The base table visual includes ID must be Required
- SnapshotDate column exists in same table as ID must be Required
- YourView contains rows matching chosen snapshot dates must be Required