How EazyBI Supporting Portfolio

I see from EazyBI documents that EazyBI can import the custom fields from Portfolio, and can import the Jira hierarchy of Portfolio.

https://docs.eazybi.com/eazybijira/data-import/advanced-data-import-options/additional-issue-hierarchies#AdditionalIssuehierarchies-PortfolioforJirahierarchyimport(onelevelaboveJiraepics)

https://docs.eazybi.com/eazybijira/data-import/data-from-jira-and-apps/portfolio-for-jira-custom-fields

Not sure whether EazyBI can fully support all the functions of Portfolio such as capacity reporting, etc…? Can you help to provide details on how EazyBI supporting JIRA Portfolio?

Yes, you are correct. eazyBI can import Jira Portfolio for Jira server into eazyBI supporting hierarchy and custom fields. eazyBI does not have default Portfolio specific reports support. Usually, you should be able to build most of the reports you are looking for.

We have many report example in our demo account:
Here are a couple of reports in our demo account on Sprints you can try as well:
Story Points Burndown by Sprints for Epic
Story Points Progress and Velocity by Sprints in Epic
Story Points Burnup in Epic in Time

Those reports and other reports in our demo account are not designed specifically for Portfolio. They can be updated for it, though. You can switch Epic link in those reports examples with some Portfolio dimension. In some reports might require updates in formulas as well.

We do not have a capacity report example as you shred with us.

Portfolio Capacity report definition
   {
  "cube_name": "Issues",
  "cube_reports": [ {
     "name": "Portfolio Capacity report",
     "result_view": "bar_chart",
     "definition": {"columns":{"dimensions":[{"name":"Measures","selected_set":["[Measures].[Story Points planned]","[Measures].[Sprint Story Points completed]","[Measures].[Capacity]","[Measures].[Active sprint]"],"members":[]}]},"rows":{"dimensions":[{"name":"Sprint","selected_set":["[Sprint].[Sprints planning]"],"members":[{"depth":0,"name":"Sprints planning","full_name":"[Sprint].[Sprints planning]","calculated":true,"drillable":true,"expanded":true,"drilled_into":false,"removed":true}],"bookmarked_members":[]}],"filter_by":{"conditions":[{"expression":["[Measures].[Capacity report filter]"],"operator":"matches","value":"true"}]}},"pages":{"dimensions":[{"name":"Project","selected_set":["[Project].[All Projects]"],"members":[{"depth":0,"name":"All Projects","full_name":"[Project].[All Projects]","drillable":true,"type":"all","expanded":true,"drilled_into":false}],"bookmarked_members":[],"current_page_members":["[Project].[All Projects]"]},{"name":"Team","selected_set":["[Team].[All Teams]"],"members":[{"depth":0,"name":"All Teams","full_name":"[Team].[All Teams]","drillable":true,"type":"all","expanded":true,"drilled_into":false}],"bookmarked_members":[],"current_page_members":["[Team].[All Teams]"]}]},"options":{"nonempty":"rows"},"view":{"current":"bar_chart","maximized":false,"bar_chart":{"stacked":false,"vertical":true,"swap_axes":false,"data_labels":false,"series_options":{"Capacity":{"type":"line","color":"#89A54E"},"Sprint Story Points completed":{"color":"#B5CA92"},"Active sprint":{"type":"scatter","dataLabelType":false,"color":"#AA4643"}}},"table":{}}}
  } ],
  "calculated_members": [{"name":"Sprint Story Points committed","dimension":"Measures","format_string":"#,##0.00","annotations":{"group":"Agile","predefined":true},"formula":"( [Measures].[Story Points added],\n  [Transition Field].[Sprint status],\n  [Sprint Status].[Active],\n  -- An issue was in a sprint at a sprint start time\n  [Issue Sprint Status Change].[Future =\u003e Active],\n  [Time].CurrentHierarchy.Levels('Day').DateMember(\n    [Sprint].CurrentMember.get('Start date')\n  )\n)"},{"name":"Sprint Story Points at closing","dimension":"Measures","format_string":"#,##0.00","annotations":{"group":"Agile","predefined":true},"formula":"-- Story points from issues when a sprint was closed\n( [Measures].[Story Points added],\n  [Transition Field].[Sprint status],\n  [Sprint Status].[Closed],\n  [Issue Sprint Status Change].[Active =\u003e Closed]\n)"},{"name":"Sprint Story Points completed","dimension":"Measures","format_string":"#,##0.00","annotations":{"group":"Agile","predefined":true},"formula":"(\n  [Measures].[Sprint Story Points at closing],\n  [Transition Status.Category].[Done]\n)"},{"name":"Story Points history","dimension":"Measures","format_string":"#,##0","annotations":{"group":"Agile","predefined":true},"formula":"Cache(\n  NonZero(Sum(PreviousPeriods([Time].CurrentHierarchyMember),\n    [Measures].[Story Points change]\n  ))\n  + [Measures].[Story Points change]\n)"},{"name":"Future Sprint 1","dimension":"Sprint","formula":"0","format_string":""},{"name":"Future Sprint 2","dimension":"Sprint","formula":"0","format_string":""},{"name":"Capacity","dimension":"Measures","formula":"CASE WHEN NOT IsEmpty([Measures].[Story Points history]) THEN\n Avg(\n Filter(\n   [Sprint].[Sprint].Members,\n   [Measures].[Story Points history] \u003e=0\n   ),\n   NonZero([Measures].[Sprint Story Points completed])\n )\nEND","format_string":""},{"name":"Future sprints","dimension":"Measures","formula":"([Measures].[Story Points due],\n[Sprint].[(no board)])\n/\n[Measures].[Capacity]","format_string":"#,##0"},{"name":"Future Sprint 3","dimension":"Sprint","formula":"0","format_string":""},{"name":"Future Sprint 4","dimension":"Sprint","formula":"0","format_string":""},{"name":"Capacity report filter","dimension":"Measures","formula":"CASE WHEN\n[Sprint].CurrentMember.Name MATCHES \"Future Sprint.*\"\nTHEN\nVal(Replace(\n  [Sprint].CurrentMember.Name, \"Future Sprint \", \"\"\n)) \nELSE 0\nEND \u003c= CoalesceEmpty([Measures].[Future sprints],0)","format_string":""},{"name":"Future Sprint 5","dimension":"Sprint","formula":"0","format_string":""},{"name":"Future Sprint 6","dimension":"Sprint","formula":"0","format_string":""},{"name":"Story Points planned","dimension":"Measures","formula":"CASE WHEN\nNot isEmpty([Sprint].CurrentMember.Get(\"Start date\"))\nTHEN \nNonZero([Measures].[Sprint Story Points committed])\nELSE\nNonZero([Measures].[Story Points history])\nEND","format_string":""},{"name":"Sprints planning","dimension":"Sprint","formula":"Aggregate(\n  {Order(\n    Filter(\n    [Sprint].[Sprint].Members,\n    [Sprint].CurrentMember.Name \u003c\u003e \"(no sprint)\"),\n  [Sprint].CurrentMember.Key, BASC),\n  -- add set of future sprints\n  [Sprint].[Future Sprint 1],\n  [Sprint].[Future Sprint 2],\n  [Sprint].[Future Sprint 3],\n  [Sprint].[Future Sprint 4],\n  [Sprint].[Future Sprint 5],\n  [Sprint].[Future Sprint 6],\n  [Sprint].[Future Sprint 7], \n  [Sprint].[Future Sprint 7], \n  [Sprint].[Future Sprint 9],\n  [Sprint].[Future Sprint 10]}\n)","format_string":""},{"name":"Future Sprint 7","dimension":"Sprint","formula":"0","format_string":""},{"name":"Future Sprint 9","dimension":"Sprint","formula":"0","format_string":""},{"name":"Future Sprint 10","dimension":"Sprint","formula":"0","format_string":""},{"name":"Active sprint","dimension":"Measures","formula":"Case when\n NOT [Sprint].CurrentMember.GetBoolean('Closed')\n AND\nNOT isEmpty([Sprint].CurrentMember.Get('Start date'))\nThen\n 1\nEnd","format_string":""}]
}

eazyBI typically builds reports based on current data in issues only. We do not import Sprint if they are not added to the board and they do not have any issue added to those sprints. Therefore, I used the calculated members for Future Sprints. I used some formulas to calculate the Capacity and Planned Sprints there as well.

Here is a report example made with this report definition:

This report example shows Sprint progress in the project. It shows that I have one planned sprint in Jira, and I will need three more Sprints in the future to finish my project.

Daina / support@eazybi.com