Setting a start date for a predicted completion line

I found this EazyBI version report online but the predicted completion line seems to start from where the first issue within a fixVersion was created. This can skew the predicted completion line to a high degree. Based on the snippet below, how can I get that predicted completion line to start on a specific date instead of using the creation date of the oldest issue in the fixVersion?

{
  "cube_name": "Issues",
  "cube_reports": [ {
     "name": "xxxx PI 9 Version Report",
     "folder_name": "Samples Jira Issues",
     "result_view": "timeline_chart",
     "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Story Points history]","[Measures].[Cumulative Story Points resolved till today]","[Measures].[Predicted completion line]","[Measures].[Predicted dates]"],"members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time.Weekly].[Week].Members"],"members":[],"bookmarked_members":[]},{"name":"Fix Version","selected_set":["[Fix Version].[PI9]"],"members":[],"bookmarked_members":[]}],"filter_by":{"conditions":[{"expression":["[Measures].[Time in version]"],"operator":"\u003e","value":"0"}]},"nonempty_crossjoin":false},"pages":{"dimensions":[{"name":"Fix Version","duplicate":true,"selected_set":["[Fix Version].[PI9]"],"members":[{"depth":0,"name":"PI9","full_name":"[Fix Version].[PI9]","calculated":true,"drillable":true,"dimension":"Fix Version","expanded":true,"drilled_into":false}],"bookmarked_members":[],"current_page_members":["[Fix Version].[PI9]"]}],"nonempty_crossjoin":true},"options":{},"view":{"current":"timeline_chart","maximized":false,"timeline_chart":{"series_type":"area","stacked":false,"series_options":{"All open story points":{"type":"line-Dash"},"Predicted date":{"type":"plotline","dataLabelType":"top vertical"},"Total story points":{"type":"line-Dash"},"Today":{"type":"plotline","dataLabelType":"top vertical","color":"#F95E16"},"Predicted date new":{"type":"plotline","dataLabelType":"top vertical"},"Dates":{"type":"plotline","dataLabelType":"top vertical"},"Milestones":{"type":"plotline","dataLabelType":"top vertical"},"Predicted dates":{"type":"plotline","dataLabelType":"top vertical","color":"#F95E16"},"Predicted completion line":{"type":"line-Dash"},"Version burn-down":{"type":"line-Dash"},"Version burn-up":{"type":"line-Dash"},"Cumulative Story Points resolved till today":{"color":"#00875A","type":"area"},"Story Points history":{"color":"#79E2F2"}},"show_full_caption":["Measures"]},"table":{}},"calculated_members":[],"description":"Version reports show the aggregate total of story points in a fixVersion, completed points and the timing of points added and completed. The \"predicted completion line\" on this chart needs to be improved. It currently starts with the earliest date of all stories tagged in the fixVersion. It SHOULD start at the PI start date.  For now, visualize the line beginning at the PI start date and its slope if plotted to the current date and story points completed (same as it is in the graph below but starting at the PI start date)."}
  } ],
  "calculated_members": [{"dimension":"Measures","name":"Transition to status first date","format_string":"yyyy-mm-dd hh:nn:ss","formula":"TimestampToDate(\n  [Measures].[Transition to status first timestamp]\n)"},{"dimension":"Measures","name":"Version release date","format_string":"mmm dd yyyy","formula":"CoalesceEmpty(\n  [Affects Version].CurrentHierarchyMember.get('Release date'),\n  [Fix Version].CurrentHierarchyMember.get('Release date')\n)"},{"name":"Story Points history","dimension":"Measures","format_string":"#,##0.00","formula":"Cache(\n  NonZero(Sum(PreviousPeriods([Time].CurrentHierarchyMember),\n    [Measures].[Story Points change]\n  ))\n  + [Measures].[Story Points change]\n)\n"},{"name":"Cumulative Story Points resolved","dimension":"Measures","format_string":"#,##0.00","formula":"Cache(\n  Sum({PreviousPeriods([Time].CurrentHierarchyMember),\n      [Time].CurrentHierarchyMember},\n    [Measures].[Story Points resolved]\n  )\n)\n"},{"name":"PI9","dimension":"Fix Version","formula":"Aggregate(\nFilter(\n[Fix Version].[Version].Members,\n[Fix Version].CurrentHierarchyMember.get('Status') = \"Unreleased\"\nAND\n[Fix Version].CurrentHierarchyMember.Name MATCHES 'xxxx PI9'\n)\n)","format_string":""},{"name":"Predicted completion date","dimension":"Measures","formula":"--annotations.group=Predicted\nCache(\nCase when\n  ([Measures].[Story Points resolved],\n   [Time].CurrentHierarchy.DefaultMember) \u003e 0\n   AND\n   ([Measures].[Story points due], \n    [Time].CurrentHierarchy.DefaultMember) \u003e 0\nThen\n  DateAddDays( \"Today\",\n  -- add days to reach this ammount\n  Cache(\n  -- all currently open stroy points\n    ([Measures].[Story points due], \n     [Time].CurrentHierarchy.DefaultMember)\n      /\n -- divided by days performance\n    Cache(\n      -- currently resolved story points\n       ([Measures].[Story points resolved], \n     [Time].CurrentHierarchy.DefaultMember)\n      /\n      -- days till today\n      DateDiffDays(\n       [Measures].[Version report Start Date], \n       \"Today\")\n    )\n  )\n)\nEnd)","format_string":"mmm dd yyyy"},{"name":"Predicted completion line","dimension":"Measures","formula":"--annotations.group=Predicted\nCASE WHEN\n-- apply for predicted period only\n (DateinPeriod(\n [Measures].[Version report Start Date], \n [Time].CurrentHierarchyMember)\n OR\n DateBetween([Time].CurrentHierarchyMember.StartDate, \n [Measures].[Version report Start Date],\n [Measures].[Predicted completion date]))\nTHEN\n -- pace of currently resolved points per day : total resolved days in version divided by days in version till today\n  Cache(\n  ([Measures].[Story points resolved], \n   [Time].CurrentHierarchy.DefaultMember)\n   /\n   DateDiffDays(\n     [Measures].[Version report Start Date], \n     DateParse('Today'))\n  )\n  *\n  -- calculate progress for each period from start date till period end or till predicted date\n  Case \n   when\n     DateInPeriod([Measures].[Predicted completion date],[Time].CurrentHierarchyMember) \n   then\n     DateDiffDays([Measures].[Version report Start Date],[Measures].[Predicted completion date]) + 1\n   else \n     DateDiffDays([Measures].[Version report Start Date],[Time].CurrentHierarchyMember.NextStartDate)\n  End\nEND","format_string":"#,##0.00"},{"name":"Predicted dates","dimension":"Measures","formula":"--annotations.group=Predicted\nCase When\n  DateInPeriod(\n    Now(),\n    [Time].CurrentHierarchyMember)\nThen\n  'Today - ' \n  || + Format(Now(), 'Medium Date')\nWhen\n      DateInPeriod(\n        [Fix Version].CurrentHierarchymember.Get('Release date'),\n        [Time].CurrentHierarchyMember)  \nThen\n   'Version release - ' \n  || + Format([Fix Version].CurrentHierarchymember.Get('Release date'), 'Medium Date')\nWhen \n  DateInPeriod(\n    [Measures].[Predicted completion date],\n    [Time].CurrentHierarchyMember)  \nThen\n  Case when\n      DateInPeriod(\n        [Fix Version].CurrentHierarchymember.Get('Release date'),\n        [Time].CurrentHierarchyMember)\n     Then\n       'Predicted/Version date - ' \n      || Format([Measures].[Predicted completion date], 'Medium Date')\n    Else\n  'Predicted date - ' \n  || Format([Measures].[Predicted completion date], 'Medium Date')\n  End\nEnd","format_string":"#,##0"},{"name":"Version report Start Date","dimension":"Measures","formula":"--annotations.group=Predicted\n-- if version has start date it will be used as a Start date, \n-- otherwise first day when Issues with story points were resolved will be treated as Start date\n\nCache(\nCase when\n  Not isempty([Fix Version].CurrentHierarchyMember.get('Start date'))\nThen\n-- Selected fix versions has Start Date, this date is used as Start Date \n  [Fix Version].CurrentHierarchyMember.getDate('Start date')\nElse\n-- the first date when an issue in version moved to any in progress status\n  DateParse(([Measures].[Transition to status first date],\n   [Transition Status.Category].[In Progress],\n  [Time].CurrentHierarchy.Defaultmember))\nEnd)\n\n-- ALTERNATIVE : version selection Start date\n-- Cache(\n--   TimestampToDate(MIN(\n--     Filter(\n--       IIF([Fix Version].CurrentHierarchy.Name = \"Fix Version.By name\",\n--        DescendantsSet([Fix Version].CurrentHierarchyMember,[Fix Version.By name].[Project]),       \n--        DescendantsSet([Fix Version].CurrentHierarchyMember,[Fix version].CurrentHierarchy.Levels('Version'))\n--       ),\n--       NOT isempty( [Fix Version].CurrentHierarchyMember.get('Start date'))),\n--    CASE WHEN \n--       ([Measures].[Issues created],\n--        [Time].CurrentHierarchy.DefaultMember) \u003e 0\n--    THEN\n--   DateToTimestamp([Fix Version].CurrentHierarchyMember.GetDate('Start date'))\n--   END\n-- )))","format_string":"mmm dd yyyy"},{"name":"Time in version","dimension":"Measures","formula":"--annotations.group=Predicted\nCase when\n  DateBetween(\n    [Time].CurrentHierarchyMember.StartDate,\n    [Measures].[Version report Start Date],\n    -- latest date - prediction date or release date\n    TimestampToDate(Max(\n      {[Measures].[Version release date],\n       [Measures].[Predicted completion date]\n      },\n      DateToTimestamp([Measures].CurrentMember)\n    ))\n    )\n  or\n  DateInPeriod(\n    [Measures].[Version report Start Date],\n    [Time].CurrentHierarchyMember\n    )\n Then\n 1\n End","format_string":"#,##0"},{"name":"Cumulative Story Points resolved till today","dimension":"Measures","formula":"Case when\n  -- show any past periods\n  DateAfterPeriodEnd(\n    \"Today\",\n    [Time].CurrentHierarchyMember)\n  OR \n  -- show current period\n  DateInPeriod(\n    \"Today\",\n    [Time].CurrentHierarchyMember\n  )\nThen\n[Measures].[Cumulative Story Points resolved]\nEnd","format_string":""}]
}

Hi, @sovann72

Welcome to the eazyBI community.

The measure “Version report start date” takes the Version Start date, but if it’s empty, the first issue within a fix version was created.

You can change the Versions “Start date” or the formula inside measure “Version report start date”.

Kind regards,
Ilze
support@eazybi.com