Question

I'm trying to create a report that allows the user to select not only a field to group by, but a second level grouping as well. To demonstrate - the records being queried are people's time sheet entries. So each record has fields such as staff (the staff member who worked the time), company (the company the time was worked for), project (the project worked on), activity (type of work done), and of course the hours worked. There are more fields, but that's enough for this example.

Let's say some records are:

John Smith, Company ABC, Project X, Activity X, 10
John Smith, Company ABC, Project X, Activity Y, 5
John Smith, Company ABC, Project Y, Activity X, 8
John Smith, Company FGH, Project Y, Activity Y, 6
Jane Jones, Company ABC, Project X, Activity X, 4
Jane Jones, Company ABC, Project Y, Activity Y, 8
Jane Jones, Company FGH, Project Y, Activity X, 7
Jane Jones, Company FGH, Project X, Activity Y, 6

and so on...

The report user can select to group by Staff, and secondarily by Project, and they'd get this:

John Smith
                          Project X                15
                          Project Y                14

Jane Jones
                          Project X                10
                          Project Y                14

Or they can choose by Project then by Activity, or whatever combination of fields they like. I've done this by nesting a table within another table, and putting grouping on both, and it works beautilfully.

EXCEPT...it doesn't export to Excel. We're on 2005, and from what I can see it still doesn't work in 2008. Not sure about after that. Regardless, there's no way we're upgrading by the time I need to publish this report.

How else can I achieve this? I'm trying to come up with some way to do the first level of grouping in the query, but even using dynamic SQL I can't come up with how to make it work for any field passed in by the parameter, since it needs to be able to return the other fields for the first level grouping.

I think a subreport would theoretically work, except that this whole thing is a subreport and I don't know if you can layer them. Plus I suspect the overhead would be awful...

Thank you!

Was it helpful?

Solution

You shouldn't need to use nested tables to achieve this. You just need a single table with two groups and two parameters "Group By 1" and "Group By 2" where the parameter values are the names of columns in your dataset.

e.g. Group By 1 parameter

value         label
------        -------
staff         Staff Member
project_name  Project

You then set the Group expression for the first group to:

=Fields(Parameters!GroupBy1.Value).Value

and the group expression for the second group to:

=Fields(Parameters!GroupBy2.Value).Value

OTHER TIPS

Try doing all the grouping in a dynamic SQL query - something like:

="select " + 
 Parameters!ReportParameter1.Value + " firstCol, " +
 Parameters!ReportParameter2.Value + " secondCol, " +
 "sum(hours_worked) total_hours from timesheets " +
 "group by " + 
 Parameters!ReportParameter1.Value + ", " +
 Parameters!ReportParameter2.Value
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top