Regarding Jasper report bar chart - jasper-reports

I'm using jasper ireport 4.0.1 for developing. And I need to realize a bar graph being shown according to the imported 2 parameter one is for the used and the other is the total value. I want the left part of this bar represented in red color and the length will be changed according to the proportion of the used value out of the total also the used value need to be shown on this part of bar and the rest of the bar in green colour with the length regarding the total minus by the used value. How can I realize that, any help will be appreciated!
Let say the total value is 45
If the used value is 24 then the bar graph will show as follow
If the used value is 44 then the bar graph will looks like this
Regards,

You can achieve that by defining 2 parameters:
max: maximum value
proportion: value when it should switch between blue and green.
Then you add a stacked bar chart with 3 series:
Series1: series expression: "RED", category expression $F{<field>}, value expression $F{<value>}
Series2: series expression: "BLUE", category expression $F{<field>}, value expression $F{<value>} < $P{proportion} ? $P{max} - $F{<value>} : 0
Series3: series expression: "GREEN", category expression $F{<field>}, value expression $F{<value>} >= $P{proportion} ? $P{max} - $F{<value>} : 0

Related

conditional color coding of a textbox in SSRS Report based on date range

I have below columns in my report body and I need to fill background color in a ProviderNextContactDate textbox based on below condition
ProviderContactDate ProviderNextContactDate
2/3/2022 8/3/2022
1/6/2022 7/6/2022
11/18/2022 5/18/2022
..
if ProviderNextContactDate is past due then Red
if ProviderNextContactDate is within 30 days then yellow
otherwise transparent
Assuming past due means past on or earlier than today and your colums are Date or DateTime data types, then just set the backgroundcolor property of the textbox to an expression something like this...
=SWITCH(
Fields!ProviderNextContactDate.Value >=Today(), "Red",
DateDiff("d", Fields!ProviderNextContactDate.Value, Today()) <=30, "Yellow",
True, Nothing
)
The final 'True' acts like an else. 'Nothing' is the default backgroundcolor for textboxes which is effectively transparent.
You may need to adjust the numbers of days or the >= and <= depnding on your needs. For example, DateDiff returns the number of boundaries crossed, in this case the number of days (denoted by the "d").

SSRS: Custom colors for the Category axis of a stacked bar chart

I have a stacked bar chart that only ever has 5 categories(but the value of the categories change from year to year, it is a sliding 5 year window).
I have successful customised the bars to the colors I want.
But now I wish to make the label of each Category the same color as the customised bar color.
Is there a way to do this?
You can use custom code for this.
In Report Properties | Code, you can paste in the following code:
Private colourPalette As String() = {"#418CF0", "#FCB441", "#DF3A02", "#056492", "#BFBFBF", "#1A3B69", "#FFE382", "#129CDD", "#CA6B4B", "#005CDB", "#F3D288", "#506381", "#F1B9A8", "#E0830A", "#7893BE"}
Private count As Integer = 0
Private mapping As New System.Collections.Hashtable()
Public Function GetColour(ByVal groupingValue As String) As String
If mapping.ContainsKey(groupingValue) Then
Return mapping(groupingValue)
End If
Dim c As String = colourPalette(count Mod colourPalette.Length)
count = count + 1
mapping.Add(groupingValue, c)
Return c
End Function
This will give you the option of the pastel colour palette. If you want other colours, simply replace the hex colour codes with values of your choice.
To use this, simply use the following expression:
=Code.GetColour(Fields!Thingy.Value)
Use this on your series and your label fill expressions. This will ensure that the same colour appears for both. If you have multiple graphs with the same values in, this will also ensure that the same data series across multiple graphs always have the same colour.

SSRS expression for calculation using a specific value

I've attempted to create an expression which should calculate when a field equals 'Mid' and another equals 'Red' then calculate a percentage based on a field / specific number.
Here are my attempts so far:
=count(IIF(Fields!loc.Value="Mid" AND Fields!Status.Value ="Red",1,Nothing)) / count(Fields!Total.Value / 500) *100
=IIF(Fields!loc.Value="Mid" AND Fields!Status.Value="Grey",(FormatPercent (Count(Fields!Total.Value) / 500 ,0))
Expected results from the calculation would be a percentage: 34.83% (to two DP)
Loc field contains locations: Mid, Lon, Manc, Newc etc etc
Status field contains colours for statuses: Red, Green, Blue, Yellow etc etc Total field contains 'total' values for locations.
Neither seem to work and I'm getting myself confused. Once this one part is done, I can then add multiple locations and colours too.
Supposing a dataset like this:
Loc Status Total
Mid Red 100
Mid Red 200
Lon Blue 90
Manc Yellow 50
And you want to calculate the percentage of occurrences where Loc = "Mid" and Status = "Red" Using an expression like this:
=COUNT(
IIF(Fields!Loc.Value = "Mid" and Fields!Status.Value = "Red",Fields!Loc.Value,Nothing)) /
COUNT(Fields!Loc.Value,"DataSetName")
Replace DataSetName by the actual name of yours.
You will get 2/4 = 0.5 (50%) if you format the cell to a percentage number.
Hope it helps.

How to change background color for each two rows in SSRS in a group

How can I write the expression in order to change background color for each two rows in SSRS?
I need something like that:
I tried expression
=IIF(Fields!Type.Value="2016 Submitted" , "LightBlue",
IIF(Fields!Type.Value="2015 Submitted" , "LightBlue",
Nothing))
But because some months dont have values it looks like this:
If I try this expression I get below:
=IIF(RunningValue(Fields!Count.Value, CountDistinct, Nothing) MOD 2 = 1, "White", "PaleTurquoise")
Dance-Henry I tried your code
=IIF(RowNumber(Nothing) Mod 4 = 1 or RowNumber(Nothing) Mod 4 = 2, "Aqua","White")
and this is what i got:
You can select the row in design pane and press F4 to setup property BackgroundColor as =IIF(RowNumber(Nothing) Mod 4 = 1 or RowNumber(Nothing) Mod 4 = 2, "Aqua","White")
Captures are attached. Do it accordingly.
RESULT is something like this
After going thru the link https://blogs.msdn.microsoft.com/chrishays/2004/08/30/green-bar-matrix/
Tested and it works well for the Green Bar Effect for Matrix. I will show it step by step here as for later reference.
Step 1: Create the Matrix and add one more column under the innermost row grouping in your matrix. (ColorNameTextbox here)
Step 2: Select the textbox of ColorNameTextbox and press F4 to setup BackgroundColor property as =Value shown below.
Step 3: Select the textbox of Matrix cell and press F4 to setup BackgroundColor property as =ReportItems!ColorNameTextbox.Value shown below.
Step 4: Drag the inner grouping header (ColorNameTextbox) to be as narrow as possible.
Step 5: Preview Pane to check the result.
If you could add a hidden color_group column and populate it with a new number at each point you want to change the color (in your case 1,1,2,2,3,3,4,4) then you could use something like the following (which works for varying size groups):
IIF(RunningValue(Fields!color_group.Value, CountDistinct, Nothing) MOD 2 = 1, "White", "PaleTurquoise")
I had a similar problem where I could not come up with alternating rows because my data has Column Groups that were the RowNumber(Nothing) method to fail. Learning from all the other posts here this is how I resolved it in steps.
I added the following code into the report properties, that provides a function to get the row number, each time it is called. The function increments the row count each time it is called. >>Right click space around the report >> Properties >> Code. Alternatively go to Code Properties Window, when the report is selected.
Add the following lines:
Public Row_Sum As Decimal = 0
Public Function Lookup_Sum( ) As integer
Row_Sum = Row_Sum + 1
Return Row_Sum
End Function
I added a new column at the beginning of the rows called No. that would calculate and show the row number.Right click the first column >>Insert Column>>Inside Group-Left.
On the expression for the new report add this line of code. Also take a note of the name of the TextBox that will have the No. Value. It will be needed in the next step. In my case the TextBox is called TextBox6 (Properties Window). >>Right Click Cell>>Expression.
Add the code:
=Code.Lookup_Sum()
I highlighted the entire row and went to the Background property and added the following expression to compute the row number.
Add the code(TextBox6 is the name Textbox name noted above):
=IIF(VAL(ReportItems!Textbox6.Value) MOD 2, "LIGHTBLUE", "WHITE")

Need to count a running value percentage top 80 percentile number of rows

I have a running value expression that color codes (Yellow) when it reaches 80%. The remaining 20% are then without color. I need to count the number of rows that comprise that 80%.
Here is the expression that's placed in the Background Color properties:
=IIF(RunningValue(Sum(CDbl(Fields!qtr_total.Value)), Sum, "Data8020") <
(Sum(Fields!qtr_totalValue.Value, "Data8020") * .8), "Yellow", "Transparent")
I just need to count the number of rows that are marked in yellow.
Add a column with the following expression:
=IIF(RunningValue(Sum(CDbl(Fields!qtr_total.Value)), Sum, "Data8020") <
(Sum(Fields!qtr_totalValue.Value, "Data8020") * .8), 1, 0)
and then sum this column to get to the count value. You can hide this column so that it wont mess the looks of your report.