Advance your Data & AI career with 50 days of live learning, dataviz contests, hands-on challenges, study groups & certifications and more!
Get registeredGet Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now
Hi, I am trying to build a time machine for the project execution. What that means?
1. I have a table named Releases changelog. In the table I have columns: Key, Changed datetime, Release assigned.
Over time the key may jump from one release to another, and the timestamp allows to catch each of those steps.
2. I also have a Releaes table, with columns: name, name ordered. For each name, there is an ordered value so sorting is easier then. Mind, for this table, I can have multiple names different names which map to the one ordered value.
3. I have a date changed table, which is just a calendar table. I use it as a slicer so I can control what change dates I allow to use
Relationships are:
Where the active connection is based on Release name new = name
I want to build a visual like this (I already managed to achieve something close to what I need, but it is problematic - more on this later as solving those problems is a core of my question) which will show me progress of tickets closed aggregated at the epic level as well as initiative level.
The whole idea is that I control date changed through slicer and that means, my report should accept the newest date changed release name from release changelog, but it should not be larger than that selected date changed value. This way, I should take the value of a release assignment at the selected time.
I managed to create following measures
1. to find out the latest status
Latest Release Per Key =
CALCULATE(
LOOKUPVALUE(
'Releases changelog'[Release name new ordered],
'Releases changelog'[Key], SELECTEDVALUE('Releases changelog'[Key]),
'Releases changelog'[Changed date],
MAX('Releases changelog'[Changed date])
),
ALLEXCEPT('Releases changelog', 'Releases changelog'[Key]),
ALLSELECTED('Changed date'[Date])
)
2. to calculate the progress percentage
Cumulative Progress Percentage latest release =
VAR CurrentRelease = MAX('Releases'[Release name ordered]) // Get the current release based on the matrix column context
VAR CumulativeCount =
CALCULATE(
DISTINCTCOUNT('Releases changelog'[Key]),
FILTER(
'Releases changelog',
'Releases changelog'[Release name new ordered] <= CurrentRelease
),
VALUES('Releases changelog'[Initiative summary]) // Keep the context of the current Epic
)
VAR TotalCount =
CALCULATE(
DISTINCTCOUNT('Releases changelog'[Key]),
All('Releases'[Release name ordered]), // Remove the filter from the release column
VALUES('Releases changelog'[Initiative summary]) // Keep the context of the current Epic
)
VAR Div = DIVIDE(CumulativeCount, TotalCount, 0)
RETURN Div
//IF(ISBLANK(Div), 0, Div)
this one gives me following view
Now I need the final measure to have a desired view but it is not working
Cumulative Progress Sum Latest Release =
VAR CurrentRelease = MAX('Releases'[Release name ordered])
VAR CumulativeCount =
CALCULATE(
[Cumulative Progress Percentage latest release],
FILTER(
ALLSELECTED('Releases'),
'Releases'[Release name ordered] <= CurrentRelease
)
)
RETURN
CumulativeCount
which produces following results
I've run out of ideas what am I doing wrong. The problem with the results is that often there are partially finished elements at the sub level however the calculation returns the 100%.. see the colored image...
I think I am missing something conceptually. Let's simplify things
I have this model
My changelog data are
| Release name | Key | Date updated |
| 2024 January-February | DW-200 | 10.10.2023 00:00 |
| 2024 January-February | DW-300 | 11.10.2023 00:00 |
| 2024 January-February | DW-400 | 10.10.2023 00:00 |
| 2024 July-August | DW-100 | 05.12.2023 00:00 |
| 2024 March-April | DW-200 | 01.12.2023 00:00 |
| 2024 March-April | DW-300 | 01.12.2023 00:00 |
| 2024 March-April | DW-400 | 02.12.2023 00:00 |
| 2024 May-June | DW-200 | 15.10.2023 00:00 |
| 2024 May-June | DW-300 | 19.10.2023 00:00 |
| 2024 May-June | DW-400 | 15.10.2023 00:00 |
| 2024 September-October | DW-100 | 15.10.2023 00:00 |
The Issues table consists of unique keys and unique release table consists of unique releases
Now, I think I need indicate (true, false) those changelog entries that the change date is lower than the date selected in a slicer and the change date is highest per key
Update: This does the job I think
Check Latest Update By Key =
VAR LatestDate = CALCULATE(
MAX('Release changelog'[Date updated]),
ALLEXCEPT('Release changelog', 'Release changelog'[Key]),
'Release changelog'[Date updated] <= MAX('Date'[Date])
)
RETURN
IF(
LatestDate = MAX('Release changelog'[Date updated]),
1,
0
)
You seem to be pretty far along already. Read about EVALUATEANDLOG, install the DAXDebugOutput app, and troubleshoot your measures. Probably somewhere a wrong filter context.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!
Check out the October 2025 Power BI update to learn about new features.