Hi everyone,
Imagine you manage several Jira projects. Instead of opening the Control Chart in each project one by one to check their Average Cycle Time, I’d like to have a single eazyBI report that shows these values side by side — directly in eazyBI, using the same calculation logic as Jira’s Control Chart.
I’ve already built a report called “Cycle Time (Duration)”, and it’s almost matching the Control Chart results, but not exactly. It seems there’s a small difference in how the average or time window is being calculated.
What I’m trying to achieve:
- Actual (-1mo): Average Cycle Time for the previous month
- Target (-2mo): Average Cycle Time for two months ago
These measures should always adjust automatically — for example, when we move into a new month, the time window shifts back accordingly.
Example (today = Nov 11, 2025) in Jira’s Control Chart:
- Actual: 28/Mar/19 → 31/Oct/25 (Timeframe) → 3w 3d 4h Average Cycle Time (-1mo)
- Target: 28/Mar/19 → 30/Sep/25 (Timeframe) → 3w 3d 15h Average Cycle Time (-2mo)
These are the expected results when using the same project and status filters.
However, in eazyBI, the numbers are close but not identical — even when using the same filters and measuring Cycle Time based on the In Progress status category.
Current MDX formulas:
- Target (-2mo):
CASE
WHEN NOT IsEmpty([Measures].[Issues resolved count]) AND
[Measures].[Issues resolved count] > 0
THEN
ROUND(
(
Sum(
-- Filter time to include only periods up to the previous closed month
Filter(
Descendants([Time].[Month].Members, [Time].[Month]),
[Time].CurrentMember < [Time].CurrentHierarchyMember.PrevMember
),
-- Consider only time in statuses from the "In Progress" category
([Measures].[Days in transition status],
[Transition Status.Category].[In Progress])
) * 1.0 /
Sum(
Filter(
Descendants([Time].[Month].Members, [Time].[Month]),
[Time].CurrentMember < [Time].CurrentHierarchyMember.PrevMember
),
[Measures].[Issues resolved count]
)
) / 7,
2
)
ELSE
NULL
END
- Maximum (Target * 1.2):
CoalesceEmpty([Measures].[Target], 0) * 1.2
- Actual (-1mo):
CASE
WHEN
NOT IsEmpty([Measures].[Issues resolved count]) AND
[Measures].[Issues resolved count] > 0
THEN
ROUND(
(
Sum(
Filter(
DescendantsSet([Issue].CurrentHierarchyMember, [Issue].[Issue]),
-- Filter only issues with "Done" status, excluding "Cancelado"
[Measures].[Issue status] <> 'Cancelado'
AND
([Measures].[Issues resolved], [Status.Category].[Done]) > 0
),
(
[Measures].[Days in transition status],
[Transition Status.Category].[In Progress]
)
) / 7 + 0.142857 -- Add minimum equivalent of 1 day in weeks
) /
Sum(
Filter(
DescendantsSet([Issue].CurrentHierarchyMember, [Issue].[Issue]),
-- Same filter for denominator
[Measures].[Issue status] <> 'Cancelado'
AND
([Measures].[Issues resolved], [Status.Category].[Done]) > 0
),
[Measures].[Issues resolved]
),
2
)
ELSE
NULL
END
Goal: Create a dynamic eazyBI report (by Project) that displays the exact same Average Cycle Time value shown in the Jira Control Chart, comparing the previous month (-1mo) and two months ago (-2mo).
Questions:
- Has anyone managed to get exactly the same Average Cycle Time values from Jira’s Control Chart inside eazyBI?
- Is there a more accurate MDX approach or recommended setup to make both calculations match precisely?
Thanks in advance for your help!
Best Regards,


