@lauma.cirule Would there be any way to aggregate/sum multiple versions without a unique naming convension? For example simply by selecting multiple versions in the pages?
When i do this now, it breaks:
Report definition:
{
"cube_name": "Issues",
"cube_reports": [ {
"name": "All Projects Configurable Jira Project Prediction report",
"folder_name": "CoC BC",
"result_view": "timeline_chart",
"definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Project prediction]","[Measures].[Project prediction low]","[Measures].[Project prediction high]","[Measures].[Rolling prediction]","[Measures].[Story Points history]","[Measures].[Cumulative Story Points resolved till today]","[Measures].[Selection Predicted Date]","[Measures].[Current Date]","[Measures].[Version Commited Date]"],"members":[]}]},"rows":{"dimensions":[{"name":"Time","selected_set":["[Time.Weekly].[Week].Members"],"members":[],"bookmarked_members":[]},{"name":"Assignee","selected_set":["[Assignee].[All Assignees]"],"members":[],"bookmarked_members":[]},{"name":"Issue Type","selected_set":["[Issue Type].[All Issue Types]"],"members":[],"bookmarked_members":[]},{"name":"Fix Version","selected_set":["[Fix Version].[All Fix Versions]"],"members":[],"bookmarked_members":[]}],"filter_by":{"conditions":[{"expression":["[Measures].[Time in project]"],"operator":"\u003e","value":"0"}]},"nonempty_crossjoin":false},"pages":{"dimensions":[{"name":"Project","selected_set":["[Project].[All Projects]"],"members":[{"depth":0,"drillable":true,"drilled_into":false,"expanded":true,"full_name":"[Project].[All Projects]","name":"All Projects","type":"all"}],"bookmarked_members":[],"current_page_members":["[Project].[All Projects]"]},{"name":"Fix Version","duplicate":true,"selected_set":["[Fix Version].[All Fix Versions]"],"members":[{"depth":0,"name":"All Fix Versions","full_name":"[Fix Version].[All Fix Versions]","drillable":true,"type":"all","expanded":true,"drilled_into":false}],"bookmarked_members":[],"current_page_members":["[Fix Version].[All Fix Versions]"]}]},"options":{},"view":{"current":"timeline_chart","maximized":false,"timeline_chart":{"series_type":"line","series_options":{"All open story points":{"type":"line-Dash"},"Cumulative Issues resolved":{"color":"#00875A","type":"area"},"Dates":{"dataLabelType":"top vertical","type":"plotline"},"Milestones":{"dataLabelType":"top vertical","type":"plotline"},"Predicted date":{"dataLabelType":"top vertical","type":"plotline"},"Predicted date new":{"dataLabelType":"top vertical","type":"plotline"},"Predicted on":{"dataLabelType":"top vertical","type":"plotline"},"Project prediction":{"type":"line-Dash"},"Project prediction high":{"color":"#FFBC29","type":"line-Dash"},"Project prediction low":{"color":"#FFBC29","type":"line-Dash"},"Rolling prediction":{"type":"line-Dash"},"Today":{"color":"#5E6C84","dataLabelType":"top vertical","type":"plotline"},"Total story points":{"type":"line-Dash"},"Version burn-down":{"type":"line-Dash"},"Version burn-up":{"type":"line-Dash"},"S-curve guideline":{"color":"#E74B71","type":"line-Dash"},"Cumulative Story Points resolved":{"color":"#00875A","type":"area"},"Cumulative Story Points resolved till today":{"color":"#00875A","type":"area"},"Selection Predicted Date":{"type":"plotline","dataLabelType":"top vertical","color":"#00B8D9"},"Current Date":{"type":"plotline","color":"#5E6C84","dataLabelType":"top vertical"},"Version Commited Date":{"type":"plotline","color":"#B31238","dataLabelType":"top vertical"}},"show_full_caption":["Measures"]},"table":{}},"calculated_members":[],"description":"\u003cspan style=\"font-family:Papyrus; font-size:1.5em;\"\u003eSelect only a **SINGLE Project** and/or a **SINGLE Version**\u003c/span\u003e\n\u003cspan style=\"font-family:Papyrus; font-size:1.25em;\"\u003eHow is your experience? \u003ca href=\"https://forms.office.com/e/9tcyj9B3Xh\"\u003eLeave feedback on this tool here\u003c/a\u003e.\u003c/p\u003e\u003c/span\u003e"}
} ],
"calculated_members": [{"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":"Story Points remaining","dimension":"Measures","format_string":"#,##0.00","formula":"[Measures].[Story Points history] -\n[Measures].[Cumulative Story Points resolved]\n"},{"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":""},{"name":"Project predicted date","dimension":"Measures","formula":"--annotations.group= Predicted by issues\nCache(\nCase when\n-- there is already resolved \n ([Measures].[Story Points resolved],\n [Time].CurrentHierarchy.DefaultMember) \u003e 0\n AND\n-- there is still some unresolved issues\n ([Measures].[Story Points remaining], \n [Time].CurrentHierarchy.DefaultMember) \u003e 0\nThen\n DateAddDays( 'Today',\n -- add days to reach this ammount from Now till..\n -- in how many days you will resolve currently open issues based on \n -- previously resolved issues from project start till today\n Cache(\n -- all currently open issues\n ([Measures].[Story Points remaining], \n [Time].CurrentHierarchy.DefaultMember)\n /\n -- divided by days performance\n Cache(\n -- currently resolved issues\n ([Measures].[Story Points resolved], \n [Time].CurrentHierarchy.DefaultMember)\n /\n -- days till today from project start\n DateDiffDays(\n [Measures].[Project start date], \n 'Today')\n )\n ) + 1\n)\nEnd)","format_string":"mmm dd yyyy"},{"name":"Project start date","dimension":"Measures","formula":"--annotations.group= Predicted by issues\n-- projects starts at the moment when the first issue is resolved from any In progress status\nDateWithoutTime(TimestampToDate(\n ([Measures].[Transition from first timestamp],\n [Resolution].[(unresolved)],\n [Transition Field].[Resolution],\n [Transition status.Category].[In Progress],\n [Time].CurrentHierarchy.DefaultMember)\n))\n-- old version\n-- Cache(\n-- -- First date with issues resolved will be project Start date\n-- Filter([Time].CurrentHierarchy.Levels('Day').Members,\n-- [Measures].[Issues resolved] \u003e 0\n-- ).Item(0).StartDate \n-- )\n\n","format_string":"mmm dd yyyy"},{"name":"Project prediction","dimension":"Measures","formula":"--annotations.group=Predicted by issues\nCASE WHEN\n-- apply for predicted period only\n (DateinPeriod(\n [Measures].[Project start date], \n [Time].CurrentHierarchyMember)\n OR\n DateBetween([Time].CurrentHierarchyMember.StartDate, \n [Measures].[Project start date],\n [Measures].[Project predicted 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].[Project 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].[Project predicted date],[Time].CurrentHierarchyMember) \n then\n DateDiffDays(DateAddDays([Measures].[Project start date],1),[Measures].[Project predicted date]) + 1 \n else \n DateDiffDays(DateAddDays([Measures].[Project start date],1),[Time].CurrentHierarchyMember.NextStartDate)\n End\nEND","format_string":"#,##0.00"},{"name":"Time in project","dimension":"Measures","formula":"--annotations.group= Predicted by issues\nCase when\n DateBetween(\n [Time].CurrentHierarchyMember.StartDate,\n [Measures].[Project start date],\n [Measures].[Project predicted date]\n )\n or\n DateInPeriod(\n [Measures].[Project start date],\n [Time].CurrentHierarchyMember\n )\n Then\n 1\n End","format_string":"#,##0"},{"name":"Project prediction high","dimension":"Measures","formula":"--annotations.group=Predicted by issues\nCASE WHEN\n-- apply for predicted period only\n (DateinPeriod(\n 'Today', \n [Time].CurrentHierarchyMember)\n OR\n DateBetween([Time].CurrentHierarchyMember.StartDate, \n 'Today',\n [Measures].[Project predicted date]))\nTHEN\n -- pace of currently resolved points per day : total resolved days in version divided by days in version till today\n [Measures].[Cumulative Story Points resolved]\n +\n Cache(\n ([Measures].[Story Points resolved], \n [Time].CurrentHierarchy.DefaultMember)\n /\n DateDiffDays(\n [Measures].[Project start date], \n DateParse('Today'))\n )\n -- high + 25%\n * 1.25\n *\n -- calculate progress for each period from Today till period end or till predicted date\n Case \n when\n DateInPeriod([Measures].[Project predicted date],[Time].CurrentHierarchyMember) \n then\n DateDiffDays('Tomorrow',[Measures].[Project predicted date]) + 1 \n else \n DateDiffDays('Tomorrow',[Time].CurrentHierarchyMember.NextStartDate)\n End\nEND","format_string":"#,##0.00"},{"name":"Rolling prediction","dimension":"Measures","formula":"--annotations.group=Predicted by issues\nCase\nwhen\n DateInPeriod(\n 'Today',[Time].CurrentHierarchyMember)\nthen\n NonZero((\n [Measures].[Story Points resolved],\n [Time].CurrentHierarchy.DefaultMember))\nWhen\n DateBetween(\n [Time].CurrentHierarchymember.StartDate,\n 'Today',\n -- predicted date by rolling period\n [Measures].[Rolling predicted date]\n )\n Then\n -- current progress\n NonZero((\n [Measures].[Story Points resolved],\n [Time].CurrentHierarchy.DefaultMember))\n +\n -- add pace for each day in future\n (AVG(\n {[Time.Weekly].[Week].CurrentDateMember.Lag(52): -- should match the weeks in Rolling predicted date measure\n [Time.Weekly].[Week].CurrentDateMember.PrevMember},\n CoalesceEmpty(\n ([Measures].[Story Points resolved],\n [Time].DefaultMember),\n 0))\n -- workdays per week\n / 5 )\n -- axpand one of those two lines for additional scenarious\n -- * 1.20 -- for best case \n -- * 0.80 -- for worse case\n *\n DateDiffWorkDays('Tomorrow',[Time].CurrentHierarchyMember.NextStartDate)\nEnd","format_string":"#,##0.00"},{"name":"Rolling predicted date","dimension":"Measures","formula":"-- annotations.group = Predicted by issues\nCache(CASE WHEN\n Cache(AVG(\n {[Time.Weekly].[Week].CurrentDateMember.Lag(52):\n [Time.Weekly].[Week].CurrentDateMember.PrevMember},\n ([Measures].[Story Points resolved],\n [Time].DefaultMember)\n )) \u003e 0\n AND\n ([Measures].[Story Points remaining],\n [Time].CurrentHierarchy.Defaultmember) \u003e 0\nTHEN\n DateAddWorkDays(\"Today\", \n -- remaining scope\n ([Measures].[Story Points remaining],\n [Time].CurrentHierarchy.Defaultmember)\n / \n -- average resolved issues per week in last 52 weeks\n Cache(AVG(\n {[Time.Weekly].[Week].CurrentDateMember.Lag(52):\n [Time.Weekly].[Week].CurrentDateMember.PrevMember},\n CoalesceEmpty(\n ([Measures].[Story Points remaining],\n [Time].DefaultMember),\n 0)\n )) \n * \n -- workdays in week\n 5\n -- expand to see either worse or best case\n -- / 1.20 -- for best case \n -- / 0.80 -- for worse case\n )\nEND)","format_string":"mmm dd yyyy"},{"name":"Current Date","dimension":"Measures","formula":"--annotations.group=Predicted\nCase When\n DateInPeriod(\n Now(),\n [Time].CurrentHierarchyMember)\nThen\n 'Today - ' \n || + Format(Now(), 'Medium Date')\nend","format_string":"#,##0.00"},{"name":"Project prediction low","dimension":"Measures","formula":"--annotations.group=Predicted by issues\nCASE WHEN\n-- apply for predicted period only\n (DateinPeriod(\n 'Today', \n [Time].CurrentHierarchyMember)\n OR\n DateBetween([Time].CurrentHierarchyMember.StartDate, \n 'Today',\n [Measures].[Project predicted date]))\nTHEN\n -- pace of currently resolved points per day : total resolved days in version divided by days in version till today\n [Measures].[Cumulative Story Points resolved]\n +\n Cache(\n ([Measures].[Story Points resolved], \n [Time].CurrentHierarchy.DefaultMember)\n /\n DateDiffDays(\n [Measures].[Project start date], \n DateParse('Today'))\n )\n -- low -25%\n * 0.75\n *\n -- calculate progress for each period from today till period end or till predicted date\n Case \n when\n DateInPeriod([Measures].[Project predicted date],[Time].CurrentHierarchyMember) \n then\n DateDiffDays('Tomorrow',[Measures].[Project predicted date]) + 1 \n else \n DateDiffDays('Tomorrow',[Time].CurrentHierarchyMember.NextStartDate)\n End\nEND","format_string":"#,##0.00"},{"name":"Selection Predicted Date","dimension":"Measures","formula":"--annotations.group=Predicted by issues\nCase \nWhen \n DateInPeriod(\n [Measures].[Project predicted date],\n [Time].CurrentHierarchyMember) \nThen\n Case when\n DateInPeriod(\n [Fix Version].CurrentHierarchymember.Get('Release date'),\n [Time].CurrentHierarchyMember)\n Then\n 'Predicted date - ' \n || Format([Measures].[Project predicted date], 'Medium Date')\n Else\n 'Predicted date - ' \n || Format([Measures].[Project predicted date], 'Medium Date')\n End\nEnd","format_string":"#,##0.00"},{"name":"Version Commited Date","dimension":"Measures","formula":"--annotations.group=Predicted by issues\nCase \nWhen\n DateInPeriod(\n [Fix Version].CurrentHierarchymember.Get('Release date'),\n [Time].CurrentHierarchyMember) \nThen\n 'Commitment - ' \n || + Format([Fix Version].CurrentHierarchymember.Get('Release date'), 'Medium Date')\nend","format_string":""}]
}