getting grouped records into separate view columns - crystal-reports

I have a crystal report with a subgrouping on a field. The output is shown each group-details vertically stacked as follows:
Group Header Value 1
Detail 1a
Detail 1b
....
Group Header Value 2
Detail 2a
Detail 2b
.....
and so on.
What I need to see is the detail values in table columns as follows:
Group Header Value 1 Group Header Value 2 Group Header Value 3
Detail 1a Detail 2a Detail 3a
Detail 1b Detail 2b Detail 3b
Detail 1c Detail 3c
Detail 3d
I've tried formatting the Detail Section with multiple columns along with formatting the group with multiple column, but it's just a mess. I know I will only have at most 4 distinct Group values.
Any suggestions please?
Thanks.

Crystal is not very good at displaying items vertically like that, but here are a couple of options I can think of:
Build up 4 arrays where each corresponds to one of the groups and contains strings that are what you'd like to output for each record (one array element for "Detail 1a", one for "Detail 2b", etc.). You can do this by creating a single formula in your details section that checks the individual records for the group condition and add the values to the appropriate array.
In the report footer, create 4 formulas that output the entire contents of one of the arrays delimited by a newline character. If your arrays contain strings, you can simply use the Join() function to output the whole thing with a delimiter. Make sure those formula fields are set to "Can Grow" and place them side-by-side.
The downside to this is Crystal arrays are limited to 1000 elements, so if you'll have over 1000 records per group, this is a bad idea.
You could make 4 individual subreports for each group and place them side-by-side. I've never tried something like this before, so there might be some quirks that I'm not considering. Generally, though, you should be able to put whatever you want in the subreports and as long as it doesn't grow too large width-wise (you may needle to manually specify a very small page size in the subreports to make sure of this), it should look relatively the same as how you place them in your main report

If I understand the question correctly, you want to implement your report in a format similar to a Pivot table (as can be found in Excel).
The Crystal equivalent of this is call a Cross-Tab - you can add one to your report by selecting Insert>Cross-Tab... . This will bring up the Cross-Tab Expert, which will enable you to drag and drop the fields you want to see down and across the page into the appropriate places.

Related

SSRS Double row headers and data display for printing

** I'm using SSRS2008 R2
I have a report that the users would like to see in a printable pdf.
Problem is there are several columns, potentially too many to fit on a printed 8.5x11 paper.
One of the concepts they suggested was a stacked header/data display, like breaking the columns into 2 rows, so 2 rows of data (for John and Bill) would look like this:
NAME START_DATE STATE COMPANY
ACCOUNT BALANCE END_DATE
-------------------------------------------------------
John 1/20/2016 NY GE
10076 $100.00 2/20/2016
-------------------------------------------------------
Bill 5/13/2016 MA Netflix
00013 $150.00 12/31/2016
-------------------------------------------------------
This leads me to 2 questions:
Is there a way to do this with a tablix?
AND/OR in addition, is there a way to set a default property on the report so when the report is exported to pdf and to print, that it defaults to fit all columns on one page (therefor shrinking the font size to fit on page?)
For anyone that cares - Apparently this can easily be achieved by dragging a Tablix onto the work area, right clicking the header row, adding a new row underneath (basically becomes header row 2), then do the same thing to the details row - however make sure to insert row - Inside group. That allows you to have stacked header and data rows and you can copy / paste headers and row values in whichever row you'd prefer.
it will work if you make all the columns on the same height not unequal. If all the columns has same height, then while exporting to pdf/excel and print it will come in the same page.

Repeated values in subreport. Too many pages

I have a report with 2 suppliers. I want to show items ordered by the 2 suppliers. For that I am using a subreport.
For the 1st supplier there are 15 rows and second has 1.
But there are 2 many pages displayed. i.e. 92 pages. The values are repeated. Also a lot of empty pages are shown.
Please advise.
https://www.dropbox.com/s/i5n3z80m7c2itlt/Complex1.jrxml
https://www.dropbox.com/s/5qm5o9cz1yatfad/subcomplex.jrxml
Mithnil,
In the complex1.jrxml query, how many rows are returned? You put the subreport in the detail band, and without any report groups it will execute whatever is in the detail band for each row of the report query. Maybe you need to work on the query to only include one row per vendor.

Hide space between elements of a report

I have one report with various subreports. These subreports are within a table cell. When the subreport doesn't have any data available, I hide the components (tables, textbox, charts) in that subreport. However, this creates some blank space and I need to eliminate this space.
I already used the properties ConsumeContainerWhiteSpace and KeepTogether, but the blank space is still there.
Any suggestions to remove the blank space?
To hide or show an entire row based on another reports results will be difficult, if not impossible. You will need to get this data in your parent report somehow.
I would create a cut down version of your subreport's query that returns row count for every subreport, but within the parent report. Might look like this:
UserID RecordCount
Abby 3
Bob 0
Carl 1
If you are using SSRS 2008r2 you can then use a lookup function to set row visibility. For example the row visibility expression might be
=IIF(Lookup(Fields!UserID.Value,
Fields!UserID.Value,
Fields!RecordCount.Value,
"LookupDatasetName") > 0,
false,
true)
If an earlier version of SSRS, then join that dataset into the dataset for your table.

Crystal Reports Crosstab Suppress subtotals when there is one row

I am using a crosstab in crystal reports that has 3 grouping levels this can create a lot of subtotals across the rows. Often the subtotal row is useless if there is only one row it is summing from. Is it possible to supress subtotals where there is only one row of data? Leaving the useful subtotals (I know I can suppress the lot).
Illustration below this is how I currently have it:
This is how I would like it to be:
Notice the sub totals for the Middle Grouping B and T have been removed leaving just C as it has two distinct rows below it. To me that looks much cleared and I would be surprised if this can't be achieved.
I recommend skipping the Crystal Crosstab and making your own:
Make a subreport where you want the crosstab to appear (you may not need a subreport, but I'll assume you do).
Group the subreport by your 3 levels.
Drag & drop your fields onto your design however you want them.
In the group footer sections, add some custom field formulas with the sum({number},{group}) for the custom formula.
Using the section expert, suppress the fields as you see fit. The count({number},{group}) would be useful here.
It'll take a fair bit of tweaking to get it right, and of course the columns in your manual crosstab will be fixed, but this allows for the most customization.

Flatten data inside a crystal report

Ok, this might be a weird request, but is it possible to essentially flatten my dataset inside a crystal report?
I have a datatable in C# that was created with a join, so when it hits the report its 2 records. Most of the columns have identical data, with the last few displaying a different address.
Instead of printing the detail section multiple times with mostly similar data, I need to display 1 'record' with the common data printed once, and each records address arranged next it. As in, all the common fields displayed in one area, and then next to that the address fields from the record where 'AddressType = 1', then next to that the address fields where 'AddressType = 2'
Is this a subreport thing? Because even with subreports I can't get it to only print 1 detail section with the data from just the first record.
Is this even possible with crystal? For long drawn out reasons, I can't flatten the data before it gets to the report.
Ok, someone here in the office showed me the way, so I'll put this out there.
Given data with cols A,B,C all common and D,E different across multiple rows, this is how I 'flattened' the dataset in crystal:
Create a group based on col A, and put A,B,C inside that group header - get rid of the details section entirely
Create a subreport in the group header for each row of data, in my case 2 subreports
Inside each subreport, put fields D,E. Important: There are NO links for these subreports!
For each subreport go into the Select Expert and create a condition that shows only 1 particular row of data. This conditional will have the same field for each subreport, but different values. In my case it was AddressType='A', and AddressType='B'
This will produce 1 report, with A,B,C listed once, and D,E listed once for each subreport(once for each row of data)
This was confusing, time consuming, and I hate crystal reports now more than ever.
It would be pretty ugly, but you could add a group for each common field in Group Expert and then display the data for the common fields in the last group header. So if your common fields are field1 through field5, you would create five groups and put all five fields in the group header of field5. Then you would put the unique address fields (call them field field6 through field8) in the details section.
Now the trick is getting everything to line up correctly. You can set "underlay following sections" on the group header for field5; this will cause field1 through field5 to "fall down" into the details section. You just need to make sure that field6 through field8 are all to the right of field1 through field5 so the text does not overlap.
Now, if you want the two address records to print horizontally, I think you will need a subreport with multiple columns for that. But the same principle applies -- just make sure the subreport is to the right of field1 through field5 so the data doesn't overlap.
Have you tried the suppress if duplicated option on each non-address field?
Otherwise, you could group by the common id, put the common fields in that header, and then display the multiple addresses in the details section.
Or, you could remove the addresses from the datasource and use a subreport to fetch this data for each record. This would bypass the join and be the slowest option performance wise, due to having to select the addresses for each record.
Ok, firstly let's see if I understand this right :
You want a report that would be in the format
MainDetails Address(type1)
MainDetails Address(type2)
to instead be in the format
MainDetails Address(type1) Address(type2)
?
Assuming there are only two address types, you can do the following :
1) Group by Main details (whatever the unique entry is
2) Put the address details in the group header next to them, on the right
3) Also put the address details in the details section, but positioned as if they were in the Address(type2) column positions, so it looks like :
GH MainDetails Address
D.......................................Address
4) Next, add a sort to the report on the AddressType field, so that AddressType=1 shows first.
5) Add a conditional suppression formula to the Details section saying {AddressType=1}
6) Using the Section Expert, in the Group Header tick the 'underlay following sections' box
This should work as long as the number of addresses is either 1 or 2.