Grouped report based on scaffold data in linked pages?
I have a page structure with some scaffold data fields on it, two of which are numeric. It's an Agile User Story, with two types of Story Points data. These pages are all over the place in the Space, and can be moved and restructured as makes sense for the developers.
My release page has a data table where the first column is the title of the Story page (format is US-%ident%). This table is used to choose stories for inclusion and to prioritise them. Other columns use RnR to bring in scaffolding data fields from the referenced pages.
All this works beautifully. Now for the difficult bit:
I want to draw a chart of story points summed across all pages in the release which have a certain status. This requires a table:
|| || Points ||
|| Not started | [sum of points of pages with status = Not Started |
|| In Progress | [sum of points of pages with status = In Progress |
|| Complete | [sum of points of pages with status = Complete |
How would I go about generating this table report?
Bryan
My release page has a data table where the first column is the title of the Story page (format is US-%ident%). This table is used to choose stories for inclusion and to prioritise them. Other columns use RnR to bring in scaffolding data fields from the referenced pages.
All this works beautifully. Now for the difficult bit:
I want to draw a chart of story points summed across all pages in the release which have a certain status. This requires a table:
|| || Points ||
|| Not started | [sum of points of pages with status = Not Started |
|| In Progress | [sum of points of pages with status = In Progress |
|| Complete | [sum of points of pages with status = Complete |
How would I go about generating this table report?
Bryan
1
person has this question
I have this question, too!
Tell me when someone answers.
The more people who ask this question, the more it gets noticed.
The more people who ask this question, the more it gets noticed.
-
Inappropriate?Hi Bryan,
The short answer is that with the current version it's not really possible. The good news is that the next version of Reporting (3.2.0) should make it possible. It should be out soon, after which I'll try to update this question with a detailed answer.
To be track progress with the feature, create an account and watch this issue. -
Actually, this issue will be what you need, but they're both related and should get released at the same time. -
Inappropriate?soon = days, weeks, months?
-
The target is as soon as possible, by the end of the month at the latest. -
Inappropriate?Will the new version make it possible to sum a field across several child pages into a report?
-
Inappropriate?This is my current page. I want to show a table grouped by status of the sum of the DataStoryPoints of the referred pages.
I can see how to do stats - that looks really nice. However I can't see how (using the expanding-reporter?) I can get a collection of pages from the collection of text I have in data:UserStories > data:StoryID.
h4. Story Priority
{table-data:UserStories}
|| ID || Story || Detail || Justification || Data Pts || Graphics Pts || Status ||
| {show-if:action=edit}*{text-data:StoryID}{text-data}*{show-if}
{hide-if:action=edit}{replace-and-render}{replace-item:%ID%}{get-data:StoryID}{replace-item}{replace-body}[%ID%]{replace-body}{replace-and-render}{hide-if} |
{replace-and-render}{replace-item:%ID%}{get-data:StoryID}{replace-item}{replace-body}{report-info:data:Story|render=wiki|source=%ID%}{replace-body}{replace-and-render} |
{replace-and-render}{replace-item:%ID%}{get-data:StoryID}{replace-item}
{replace-body}{toggle-cloak:id=Detail%ID%} *Detail*
{cloak:id=Detail%ID%|visible=false}
\\{report-info:data:StoryDetail|source=%ID%|render=wiki}
{cloak}{replace-body}{replace-and-render} |
{replace-and-render}{replace-item:%ID%}{get-data:StoryID}{replace-item}
{replace-body}{toggle-cloak:id=Justification%ID%} *Justification*
{cloak:id=Justification%ID%|visible=false}
\\{report-info:data:Justification|source=%ID%|render=wiki}
{cloak}{replace-body}{replace-and-render} |
{replace-and-render}{replace-item:%ID%}{get-data:StoryID}{replace-item}{replace-body}{report-info:data:DataStoryPoints|source=%ID%}{replace-body}{replace-and-render} |
{replace-and-render}{replace-item:%ID%}{get-data:StoryID}{replace-item}{replace-body}{report-info:data:GraphicsStoryPoints|render=wiki|source=%ID%}{replace-body}{replace-and-render} |
{replace-and-render}{replace-item:%ID%}{get-data:StoryID}{replace-item}{replace-body}{report-info:data:Status|render=wiki|source=%ID%}{replace-body}{replace-and-render} |
{table-data} -
doh!
{report-table:injected=true}
{local-reporter:data:UserStories}
{report-header}Child User Stories{report-header}
{report-column:title=ID}{report-info:data:StoryID}{report-column}
{report-column:title=Status}{report-info:data:Status|source=%data:StoryID%}{report-column}
{report-column:title=Data}{report-info:data:DataStoryPoints|source=%data:StoryID%}{report-column}
{report-column:title=Graphics}{report-info:data:GraphicsStoryPoints|source=%data:StoryID%}{report-column}
{report-table} -
Inappropriate?{report-table:injected=true}
{local-reporter:data:UserStories}
{report-header}Child User Stories{report-header}
{report-column:title=ID}{report-info:data:StoryID}{report-column}
{report-column:title=Status}{report-info:data:Status|source=%data:StoryID%}{report-column}
{report-column:title=Data}{report-info:data:DataStoryPoints|source=%data:StoryID%}{report-column}
{report-column:title=Graphics}{report-info:data:GraphicsStoryPoints|source=%data:StoryID%}{report-column}
{report-table}
Above table gets raw data. However grouping-stats macro doesn't have a source parameter, so I can't group using it:
{report-table:injected=true}
{grouping-reporter:data:Status|as=Status}
{grouping-stats:data:DataStoryPoints|source=%data:StoryID%|as=DataStoryPoints}
{grouping-stats:data:GraphicsStoryPoints|source=%data:StoryID%|as=GraphicsStoryPoints}
{local-reporter:data:UserStories}
{text-sort:data:Status|source=%data:StoryID%}
{local-reporter}
{grouping-reporter}
{report-header}Child User Stories{report-header}
{report-column:title=Status}{report-info:grouped:Status}{report-column}
{report-column:title=Data}{report-info:grouped:DataStoryPoints > stats:sum|format=#.# 'pts'}{report-column}
{report-column:title=Graphics}{report-info:grouped:GraphicsStoryPoints > stats:sum|format=#.# 'pts'}{report-column}
{report-table}
The above doesn't work! -
Inappropriate?Ok, this one gets tricky due to the fact that currently the thing you're iterating over is actually a set of page names, not actual pages. Could you switch your 'StoryID' field into a {list-data} of {content-options} instead? That would make it much simpler to write a report that does what you want.
If so, it would look something like this:
{table-data:UserStories}
|| ID || Story || Detail || Justification || Data Pts || Graphics Pts || Status ||
| *{list-data:StoryID}{content-options:space=@self}{list-data}* | {report-info:data:StoryID > data:Story|render=wiki} |
{toggle-cloak:id=*} *Detail*
{cloak:id=*|visible=false}
\\{report-info:data:StoryID > data:StoryDetail|render=wiki}
{cloak} |
{toggle-cloak:id=*} *Justification*
{cloak:id=*|visible=false}
\\{report-info:data:StoryID > data:Justification|render=wiki}
{cloak} |
{report-info:data:StoryID > data:DataStoryPoints} |
{report-info:data:StoryID > data:GraphicsStoryPoints|render=wiki} |
{report-info:data:StoryID > data:Status|render=wiki} |
{table-data}
Your grouping-reporter would then look like this:
{report-table}
{grouping-reporter:data:StoryID > data:Status|as=Status}
{grouping-stats:data:StoryID > data:DataStoryPoints|as=DataStoryPoints}
{grouping-stats:data:StoryID > data:GraphicsStoryPoints|as=GraphicsStoryPoints}
{local-reporter:data:UserStories}
{text-sort:data:Status}
{local-reporter}
{grouping-reporter}
{report-header}Child User Stories{report-header}
{report-column:title=Status}{report-info:grouped:Status}{report-column}
{report-column:title=Data}{report-info:grouped:DataStoryPoints > stats:sum|format=#.# 'pts'}{report-column}
{report-column:title=Graphics}{report-info:grouped:GraphicsStoryPoints > stats:sum|format=#.# 'pts'}{report-column}
{report-table}
If you can restrict your {content-options} to a single parent or ancestor you'll get better performance also. Eg: {content-options:parent=Stories}.
That's about the best option I can think of currently. If you really need to enter the titles by text, the best way would be for us to create a new {content-data} macro or something like that, which allows the name to be entered manually. Actually, there may even be a request in JIRA for something similar - the 'link-data' macro perhaps? -
Inappropriate?Trouble is I'm going to have hundreds of pages to choose from - not good for a drop down list!
If I wanted to write my own xxx-data plugin, what interfaces would it need to support and do you have any docs on how to do it?
I've just successfully written my first macro plugin and the next ideas I have would be better written as a Reporting Supplier and an xxx-data object rather than stand alone plugins.
Bryan -
Inappropriate?Hey Bryan,
I tried replying to the email you sent to 'info@customware.net' but the address bounced for some reason. Could you email me directly and I'll point you in the right direction.
Loading Profile...



EMPLOYEE