How to disable CrossTab sort order? - visual-studio

I have a crossTab in my report that shows:
L S XL Changes Combination Material
Shirt 10 5 something somethiung something
Pants 2 4 something somethiung something
But I need it to be sorted like this:
Material Combination Changes S L XL
Shirt something somethiung something 10 5
Pants something somethiung something 2 4
Now keep in mind that I already sort the values the way I want them to be sorted in my stored procedure the only problem is that CorssTab has its own sorting and so far I haven't found a way to disable it.
I am using Visual Studio 2013 and Crystal Reports 13.0.10 and SQL 2014 (tho i doubt SQL version matters).
I am not allowed to change the version of VS or CR or SQL that I am using.
If needed I can provide you with everything you need in order to 'test' my question if you don't believe that my stored procedure sorts the values in one way but CrossTab ignores it.

Please check this link or this
This option is available in Cross-tab popup, below the column selection there is "Group option".

Create a Select Case formula that adds the desired sort position as a number before each group value:
Material
Combination
...
Use that formula for the CrossTab column
Then, use the CrossTab Group Options dialog, Options tab, to 'Customize Group Name Field' with the option to 'Use a formula as Group Name'.
In that expression, return MID({#ColumnFormula}, 4) to throw away the number prefix.

Related

How To Sort Specific Column Data in SSRS Tablix

I am using Visual Studio 2012 for SSRS and my queries come from using Microsoft SQL Server 2012.
My question below pertains to SSRS and sorting.
In my Tablix, I currently have the Row Groups set up as Group -> Manager -> Owner -> Status Description and when it pulls the data from the data from the dataset, it pulls in fine. In the tablix, basically everything is a drilldown and each of the Row Groups (except Group) is hidden initially and can be displayed/toggled by the report item ahead of it. In the Status Description part, when it pulls in the records, it pulls them in as Active, Completed, In Process...which is fine because they are pulling in ABC Order.
But I want to show that specific column when it pulls in as Active, In Process, Completed...in the way that a specific file would go through the process. These are only 3 specific ways the data could pull it as, there are more, but these are the most common seen. How do I sort that individual column to get it in the way I mentioned above or a way that I can customize the sorting based on how I want it to be seen?
You can use expressions in the sort order to get the sorting exactly as you'd like.
What you can do is use the SWITCH statement to number your output in the order you want. For example I have 3 statuses: "Complete", "On Hold" and "Word at Risk". Normally they would either sort as Ascending or Descending... but if I enter this in the Sort Order Formula I can change that:
=SWITCH(
Fields!PRS_STATUS.Value = "Complete", 1,
Fields!PRS_STATUS.Value = "Word at Risk", 2 ,
Fields!PRS_STATUS.Value = "On Hold", 3)
And now it orders 1,2,3 aka Complete, Work at Risk, On Hold.
You can put this switch in a larger switch statement to have multiple sort orders depending on a criteria or parameter.

SSRS sort not working

On a number of reports I have noticed that setting sort options through the tablix properties does not work. I choose the data I'd like to sort by (date) and set the option (Z to A), but the report still shows unsorted. Has anyone else seen this issue? I have read that updating the report xml to include the sort may be what needs to be done because the report builder does not preserve the changes made. Haven't gone down that road yet as I'm looking to see if there's a fix already identified.
Date Type Lead Name State distance Consultant ZIP State 1 Level Reason url
Those are the columns from the export with data filling each column. Can't give too much info because it shows phone numbers and addresses.
One option is to sort the data in your dataset. Then you can leave it and SSRS will honor that.
As the others mentioned, make sure you check the datatype so it's not trying to sort the dates as a string.
Set the sort priorities at the group level, not on the table or dataset properties.
You should never have to edit the XML to get this to work. This is a basic built-in feature that most reports use.
Do you have groups on your tablix? if yes, did you try sorting it with the Row Groups or Column Groups at bottom instead of the sorting properties of the tablix?

Dynamically shows Crystal Report group footer

I need to do something specific in Crystal Report for Visual Studio 2005.
Let's say the following data:
The report regroup the data with the prdCode field, which gives something like this:
Now, I need to add a subtotal everytime one of the 4 first columns changes (Lot / Cédule/ Brand/ Contenant in the report). In this case, I should have a subtotal for the first row (lot=153363 and next one is 171008). Then, another subtotal at the last line of lot=171008 and Cédule = 023854. Then another subtotal at lot=171008 and cédule = 023863, etc.
I have no idea how I can do this. Adding Groups won't help, as I will have 5 group footers display for the first row only. In the case of the above image, I should display only 5 subtotals. A subtotal is the sum of the Total Gross/Tare/Net fields.
Anyone can help me out on this?
thanks for your time and help
Yes you are correct adding 5 groups doesn't solve the issue and also it doesn't make any sense, Instead combine all your fields and create a single group that will seggregate the records as required.
Try following approach.
Create a formula #grouping and write below cide
ToText(Lot)&ToText(Cédule)&Brand&Contenant
Now create a group with this formula and take summary in group footer

Sorting a CrossTab Report Crystal Reports

Recently I had a problem with sorting a crosstab. I finally found a way to display the results as expected so I thought my solution may eventually help somebody else.
The "original order" doesn't work within Crystal Reports crosstabs unfortunately. The original "order by" section of my sql query contained two column: first a nvarchar column then a int column. In my results I only needed to display a concatenation of those two columns so the results normally looked like this with sql : A1, A2, A3, A10, A11.
But when it came to display the results in a Crystal Report crosstab, the sorting was different because crosstab's sorting is based on the columns/rows displayed only, not the "original order by" from the query results, so the results showed with the crosstab was instead: A1, A10, A11, A2, A3.
My way to solve this issue was to add those 2 fields within the rows section before my "concat field" because they were required for the sorting and to display only my "concat field". To hide fields within a crosstab, just go to this tab: "Customize Style Tab" (from the Cross-Tab Expert). Then select the field to hide within the Rows section and click "Suppress Subtotal" and then "Suppress Label". And it worked like a charm. Hopefully it will helps you guys saving time.
But This solution have some limitations like
if you want to export the report in Excel then it will add extra cells in grand total.
otherwise it is a good to go.
Example:
If you have 3 rows(A,B,C) to display and you added one row and you suppress it to solve your sorting issue then in Excel its grand total looks like
A B C
a 1 3
b 2 2
---------------------------
Total: 3 5

Get conditional mode efficiently in Excel

I am looking to find the mode (most occurrent) value of one column, given another column.
I know how to do it but the calculation takes multiple minutes and can make Excel unresponsive. Therefore I am looking for a better way.
Suppose my data looks like this
group | Level
1 D
1 A
1.1 B
1 C
1 A
1 E
Then I want the output to look like this:
group | LevelMode
1 A
1.1 B
Assuming the data is in the upper left corner of the worksheet, I am now using this formula, which I drag along the C column:
=COUNTIFS(A:A;A2;B:B;B2)/COUNTIF(A:A;A2)
This gives me the ratio of values within the group. Afterwards I remove all that are not above 0.5 as well as duplicates, giving me the mode for each group if it exists.
This formula does exactly what I want, but for about 50000 lines it simply takes too many resources. I expected to find this in the pivot table options, or after a quick search online, but I have not found any way to achieve my goal.
I have decent hardware, a fairly recent version of Excel and would prefer to do this without macro's. However, if macros are required to achieve this then so be it.
Try this:
Step 1.
Create the Pivot Table and place in RowLabels "Group" and under it "Level". Now, place "Level" as count in "Values" field.
Step 2.
See the picture below. Click in the black arrow in the right side of "Level" (you can't see it in the picture but it is supposed to be inside the red circle).
Choose "Values Filters", then "Top 10" and then set the number to 1 (top 1). Done!!
Attention: you need to do step 2 for "Level". If you do the same to "Group" it will not work.
Edit: this is the result and how the Pivot Table should look like.
Now to shape the output to the desired format:
Under PivotTable tools > Design, set the Report Layout to Tabular form
Disable totals and subtotals
Assuming default settings you can now easily copy the list of Groups and LevelModes

Resources