Crystal Reports User Group Selections
This is a great way to allow users control over their reports, while at the same time cutting down on the volume of reports needed to meet the business’s needs.
The basis of this solution is to control which fields are grouped on within the report, this will in turn change the summary operations and change the entire context of the report. This is done using Crystal Reports built-in Parameters in a way often overlooked by developers.
The following tutorial uses the Xtreme Access database which ships with Crystal Reports and allows the resulting report to focus on order values by either City
, Region
or Country
.
- Create a Report with the following Tables:
Customer
,Invoice
andOrders
. - Add the Fields; Customer ID, Customer Name, ‘
City
’, ‘Region
’ and ‘Country
’. - Reach agreement with the User as to the Fields they want the option to Group the Report on. In this case, we are going to use ‘
City
’, ‘Region
’ and ‘Country
’. - Create a Parameter called
prmSelectGroup
. Provide the User with three, discrete, options; ‘City
’, ‘Region
’ and ‘Country
’. - Create a Formula called
frmGroup
and enter the following code:SELECT {?prmSelectGroup} CASE “City”: {Customer.City} CASE “Region”: {Customer.Region} CASE “Country”: {Customer.Country};
- Insert a Group into the Report based on the
frmGroup
Formula. - Insert a Distinct Count Summary on the Customer ID and Grouped by
frmGroup
.Now refresh the Report and select a Group option from the Parameter. Both the Group changes and the Summary Field based on this Group.
However, there is a problem in that the Field chosen to Group by is still in the Detail Section. This is not always the case, and may not be a problem when it is, but for the sake of neatness we shall make the potential Group Fields dynamic.
- Remove the Fields ‘
City
’, ‘Region
’ and ‘Country
’ from the Report. - Create four Formula Fields,
frmField01
andfrmField02
,frmHeader01
andfrmHeader02
. - The intention is to display whichever two of the three haven’t been picked for the Group. In
frmField01
, enter the following Formula:SELECT {?prmSelectGroup} CASE “City”: {Customer.Region} CASE “Region”: {Customer.Country} CASE “Country”: {Customer.City};
And the same again for
frmField02
, but with the values moved around by one place:SELECT {?prmSelectGroup} CASE “City”: {Customer.Country} CASE “Region”: {Customer.City} CASE “Country”: {Customer.Region};
- A similar Formula is used in
frmHeader01
for theField
Header:SELECT {?prmSelectGroup} CASE “City”: “Region” CASE “Region”: “Country” CASE “Country”: “City”;
And the same again for
frmHeader02
, but with the values moved around by one place:SELECT {?prmSelectGroup} CASE “City”: “Country” CASE “Region”: “City” CASE “Country”: “Region”;
- Add
frmField01
andfrmField02
to the Detail Section and thefrmHeader01
andfrmHeader02
to the Page Header Section.
Refreshing the Report and selecting a different Parameter option will cause the Group to change and the two Fields not chosen to appear in the Detail Section
发表评论
yN64hA Great, thanks for sharing this blog post. Really Great.