I have been using SSRS off and on since SQL Server 2008. There are a number of typical SSRS pitfalls and gotchas. One of these I need to go over with some one.
This should be pretty easy for an experienced SSRS resource / expert.
Let me explain the scenario
I have an Invoice Header and Detail. The header contains the Invoice number and InvID. The INVID is the link column for the Invoice detail or the FK in the Invoice detail. I guess that must be pretty obvious to all.
Now I need a simple report that displays Invoices and their items.
For some reasons I do not want to use the Invoice number to group the invoices in the report. I want to use the INVID.
But I want to hide the value of the INVID and display only the invoice number.
In other words the report should look something like follows
Invoice Number Date / Descriptio Qty Rate Tax Amount
11001 12/52016
Item No 1 10 10 2 102
Item No 2 20 10 2 202
So on and so forth....
I know this is very easy. Any inputs would be welcome...
Plus any good recommendations in terms of resources for refreshing my knowledge of SSRS
Regards
With SSRS you have the flexibility to set the grouping conditions independently of what is displayed in the table. As the others mentioned, add a Row Parent Group by INVID. The group properties should look like this:
The basic table layout should look something like this:
So the outer group will repeat for each individual, but display the invoice number. The inner group will repeat for each applicable item.
This should point you in the right direction. I'm not sure of a good resource to direct you to. For me, trial and error has been the most helpful.
All you need to do is bring InvId in in main dataset which you are using in main Tablix, on Tablix you can apply grouping on any field of dataset.
Related
I have 6 Datasets each one is the same query but has a different WHERE clause based on employee type. They generate 6 tables. At the top of the report there is a summary table which uses reportitems!textboxXX.value to grab the totals for 2 particular fields from all the tables. I'm also using a StartDate and EndDate parameter. Each reportitems! expression in the table comes from a different dataset in the report if that is relevant.
When I run the report using dates from yesterday back to the 9th of May I get the desired output.
But when I go to the 8th I get multiple rows all the same.
and as I go even further back I get even more rows of the same information. To my knowledge nothing interesting or different happened on the 8th of May and the tables further down the report look exactly the same. Any idea what might be causing this? The design view looks like this if that helps. There's no grouping or filters on the table.
Still not certain about the mechanics behind this but I found a 'solution' so I figured I'd post it. I just made a new dataset for my summary tables where the query was simply SELECT 1. Now I get a single row every time.
I have been tasked with creating a report that needs to display in chronological order, but within that report there is data from 2 sources that covers 2 different areas of business.
What I have been asked for, is when the type of business changes, the header row is repeated with the correct column headings for that type - i.e. :
Type 1 :
Order Ref / Sales Exec / Contract Term / Despatch Date / Agreement Type / Hardware ID
Type 2 :
Order Ref / Sale Type / Contract Term / Despatch Date / Start Date / Hardware ID
Also each header row should have a different background color by the type also (although I think I can do this already). Within the report the header row could be needed multiple times if the types flip from one to the other as the report traverses through the orders in date order.
I was first looking at adding a grouping by type, but that will interrupt the chronological flow of course.
Just to complicate matters there are different numbers of item columns for each type in reality, but I might have to just leave blanks where we have less columns for one type.
Or is there some way of having sub reports that are reporting for an "outer loop" of the actual order references?
It's almost like I need to construct the report in some sort of looped code.
How can I achieve this?
You can do this using table grouping. The outermost group would be by day and then within that you would group by type. Within that you can add a group that isn't grouped by anything so that it will list all the details depending on the number of records in the dataset. So the design would end up looking something like this:
This is how it looks when you run it.
Of course you can play around with how everything is organized, but the general structure should work for you. Or at least point you in the right direction.
I want to create a rdlc report using Microsoft Report Designer. Due to complexity of my data (the given below is just an example) I do not use View on Database side. So, I have to use seperate tables (data sources) for my report design. Now, as it can be seen the example below I have one report page and I want to show PERSONAL, FAMILY and JOB INFO for each person.
There are Textboxes on PERSONAL INFO section. The data is come from table_Personal,
There are a Table on FAMILY INFO section. The data is come from Table_Famiy,
There are a Table on JOB INFO section. The data is come from Table_Job
and all the three tables contain Person_Id column.
PERSONAL INFO
Name : Christof
Surname : Robin
Age : 45
FAMILY INFO
No----- Name----- Age----- Birt Place
1------ Sarah----- 12------ London
2------ Albert----- 16------ Manchester
3------ David----- 23------ NY
JOB INFO
No------ Company----- Start Year
1------- Xyz----------- 2005
2------- T Mobile------- 1999
3------- Day Inn------- 1993
My question is;
1) I do not want to use Subreport and do not combine these tables in db side by using view (I have searchhed, but for 3 or more tables it is impossible I think).
So, is it possible to create a master-detail report like above by grouping items (table, list, etc.) and without using subreport on rdlc? If so, could you explain a little bit please?
2) I have tried to create such a kind of report like that; I use a List and inserted all the textboxes and three tables above
to this list. I assign all the three tables as Report Data Sources. I make List.DataSetName = Table_Personal and List.Grouping settings
select Group on : Person_Id and some other combination. But, unfortunately I have not managed to create such a kind of report group like above.
Could you help me please by giving some advice and if you have some sample rdlc page source please? ...Shohel
Yes it is possible but I'd done it like 6 months ago, so I don't have any sample code right now.
I have done a lot of similar cases. One such case is there are a list of students and each student has a list of marks, a list of achievements, etc.
If I remember correctly I used one storedprocedure to get all the details of all the students. One dataset. And put 'em all in one tablix and grouped 'em.
The sub-lists (like the list of marks) are separate tablixes themselves and are inserted in textboxes of the main tablix.
Hope it helps! :)
I have a SQL Server Reporting Services report that shows customer order data, but it's grouped as follows:
Store
Customer
Customer Order Items
So, each report is a grouping of stores, with a subgroup of customers per store, and then the items per customer. I'm trying to show aggregate sale and other information at each header record of the appropriate group in the report. Most of this is working well, but for each store header record, I want to show a count of the customers. I'm trying to use some variation and\or combination of RowCount, CountDistinct and other aggregate functions, but to no avail.
Can anyone help me determine how I essentially can get a "count" of customer groups to show at the Store level header? TIA!
CountDistinct on Customer should work fine - no need to specify scope if it's in the Store group header row.
I put a simple test together.
Data:
Report in designer:
Most important thing to note is the CountDistinct on Customer in the Store header row; this is just the expression used:
=CountDistinct(Fields!customer.Value)
End result, showing correct values:
Please let me know if I'm missing something.
Edit after comment:
Apologies in advance for how long this is getting.
The previous report did have row groups for Store and Customer, but I've modified this to make it more clear, hopefully. Still based on the same DataSet:
You can see there are three row groups, and each row in the report is actually a group header row belonging to one of those groups.
In the Store group header row I've kept that same CountDistinct expression. I've also added a CountRows() expression to show how many actual rows are available in each of the different groups.
Here you can see for Store1, CountRows is returning 4, i.e. there are four rows that we are aggregating in this scope, which is what we expect looking at the DataSet.
Similarly, when we apply =CountDistinct(Fields!customer.Value) in the Store scope we are considering these same 4 rows, and we see two distinct customers for Store1, which seems correct to me.
For Store2 we are considering 6 rows in total, which have three distinct customers. Again, just by applying =CountDistinct(Fields!customer.Value) we get correct value.
Hopefully this rejigged report helps clear things up. If I'm still not getting your requirements, can you please explain what numbers are wrong in my sample report based on my sample DataSet? That way I can adjust things easily on my side.
I am working on a report that will show scheduling data. This report will need to show data for any job that has a promised date between a specified date range.
The issue I am running into is how to best display this data, I have a dataset built that has header info (Job #, Description, Due Date etc.) which returns a single line row for each job.
There are then several detail records for each job (Line item descriptions / details, Work center descriptions and details). Each of these could return several rows.
My question is how to group this detail data with each header record. Hoping to have something like this with one record block per job:
-- Header Dataset Job Number , Job Desc, Date Ship By ... etc.
--Line item description dataset
--Work Center dataset
Next record.....
Thanks in advance for any help.
Brian
If each of the records in your dataset have a field that they can be grouped by then this is actually pretty easy. You need to use the grouping feature of the table in SSRS. It's easiest to create a view that contains all the rows (both headers and details) logically and pass it to SSRS as one dataset.
Here is a recent walkthrough from Microsoft. You can change the version number to match your specific version since you didn't specify in the question. Group header fields can be formatted distintly to make them standout etc.
http://technet.microsoft.com/en-us/library/dd255263.aspx
If a field that you can group by isn't contained in the dataset in the report, i.e. it's a foreign relationship or something and you can't put them into a single view then you'll need to look into sub-reports. Based on the information provided however a simple row or column group should work just fine.