I've never done this for a matrix and it's going a little over my head. Trying to make a sales report, and I can do the matrix just fine. The part I'm having trouble with and I haven't been able to find a direct answer for through googling is how to get a specific value out of the matrix.
Here is a picture of it:
Report
What I need is on the far right where it says total at the top. There I need to do another break out (dynamically would be preferred but not required) the first Column would be %change of 2013 -> 2014. Then of course then next would be 2014 to 2015 and so on.
Here is the design view if it helps: Design View
So the sum total of the year compared to the year previous.
I was trying to use iif and max but I think i'm just confusing myself but the expression i have in there is:
=Sum(iif(Max(Fields!Year.Value)=Fields!Year.Value,Fields!glamt.Value,1))
Just from my testing I got no idea what values it's pulling for that.
Something I've used before is to create a variable of the SUM of previous period, in you case year. So =SUM(IIF(Fields!Year.Value = "2017",Fields!glamt.Value,0) added into the Variables section of the report.
Then in a new column within the year grouping, you add your comparison formula;
=(SUM(glamt)-Variables!sum2017.Value) / Variables!sum2017.Value * 100.00
This gives you the percentage upshift/downshift, but you get the idea if you want the actual figure of increase/decrease in sales etc.
One of the downsides of this approach is that the variables will need to be added manually and you may have a large number depending on the number of previous periods you want to compare but should suffice for say the last 5 years.
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 a report that I built in SSRS that calculates a sum of numbers for every business day going back 10 business days. There is a column group for each business day, and there are row groups for each item being totaled. The function to calculate the sum is a simple:
=Sum(Fields!INCOME.Value)
This returns data for example as such:
Now I am creating a report to indicate the change in data from day-to-day. I figured this would be simple with the Previous() function in SSRS. So I took the same dataset and in a new tablix I replaced the original calculation with:
=Sum(Fields!INCOME.Value)-Previous(Sum(Fields!INCOME.Value),"ASOFDT2")
The Column group is called ASOFDT2. This seems to work for all but the very first column, I get the following as a result:
My question is, does anyone know why this calculation is not performing in the first group, but is for all the rest? How can I make it properly calculate the first iteration of this? For informational purposes, I'm using SQL Server 2014, and I am building the report in Visual Studio 2013.
I have also reviewed the SO question: Use of Previous() function in reverse date sorted data in SSRS? though I am not sure how to apply this to my problem. The first column is my most recent set of data and I cannot select one column newer and just hide it.
The Previous() function gets the data in the Previous column. It doesn't have any understanding of what that data is, so if your columns are in Descending order, the Previous column will be the Next day, not the Previous day
It shouldn't be too hard to include the differential data in your dataset instead of trying to calculate it in the report. Just join the table to itself on YourDateColumn = DATEADD(dd, -1, YourDateColumn), and the right side of the join will have the previous day's data, and you can subtract for the difference.
I am trying to calculate the SUM & YTD but something goes wrong then moving the query to SSRS. I works fine in SSMS:
with member
[Measures].[YTD] as
aggregate(YTD([Dim Time].[Hierarchy].currentmember),[Measures].[Belopp])
, format_string = "currency"
select [Measures].[YTD] on columns,
[Dim Time].[Year].members on rows
from cube
I create this member in SSRS:
When I view it in the report I get strange numbers. It´s like it´s making some extra summary or multiplication of the amount..
Somebody seen anything like this before or maybe has a clue to what it could be?
It works fine when viewing with lowest level of granularity i.e. date. I can also make it workable with drill down from year to date.. but the correct numbers are only in the lowest level (date), at higher levels it sums up everything which is wrong, it should take the current YTD and display, how can I do that?
I am working with a matrix report in ssrs.
Here is a sample screenshot of my report extracted in excel
The report is simple enough. It shows the data for different years (example : AS OF JAN,2012).
The netrevenue for the years are defined in the database so they are fetched accordingly. The problem is with the other sub columns. Like the "%Change" column.
The column value is calculated with the help of following formula
%change = ((NetRevenue of The current year / NetRevenue of the last year) - 1) * 100
Now what I doing to solve this problem is calculate the values using sql queries for every column and then binding it directly to the control.
My question is that is there a simpler way to do this. I mean like in table control I can access the value of a cell by using
ReportItems!Textbox1.Value
Is there a way I can access the dynamic columns of the matrix report. Like accessing the netRevenue values for different years.
If more clarification is needed for the question then please ask.
Thanks in advance.
I believe the only issue your going to have is getting the revenue at the past year?
In this case you'll need to calculate the last years revenue in the sql. Then use:
=((RpItems!NetRev.Value / RpItems!NetRev_LastYr.Value) - 1) * 100
With this case you'll need to calculate all the last years values for the % changes you want to calculate.
Can I suggest you look into this and raise another question with the sql you currently have?
I've found this works best.
I have an rdlc report file, and I am trying to make a sum which can only include the last item in each group. I have a table kind of like this:
Place = ? (Group header 1)
User = ? (Group header 2)
Date =Last(Fields!Number.Value) (Group header 3)
Number =Fields!Number.Value (Detail row)
So, in other words, in User there, I want a sum of Date... if that made sense...
The Numberrows contain many numbers per Date. But Date shows only the last number for that day, because the rest doesn't count (but must be displayed) In User I want to sum up those last numbers for all the dates for that user. And same with Place (which would be the sum of every last number for every day for every user).
Could anyone help me with this? I tried the obvious (to me at least) =Sum(Last(Fields!Number.Value)), but (also tried to specify the group in those functions, but didn't make a difference because) I get an error when I try to compile which says:
The Value expression for the textbox 'numberTextbox' contains an aggregate function (or RunningValue or RowNumber functions) in the argument to another aggregate function (or RunningValue). Aggregate functions cannot be nested inside other aggregate functions.
Which I guess kind of makes sense... but how do I do this then?
Update: I have solved the issue by adding another column, and copying those last numbers into that column. This way I can display all the numbers, and do the summing on the column that only contains the ones that is going to be in the sum. I am still very curious to if anyone have a solution to my original problem though... so please post an answer if you do!
Not sure I understand exactly what you're trying to do. Maybe something like =Last(Fields!Number.Value,"Group 1") + Last(Fields!Number.Value,"Group 2") + Last(Fields!Number.Value,"Group 3"), instead using a sum function?
the easiest way to do this would be to modify your dataset to only include the records your are displaying in the date field, that way you could just use a simple sum() instead of trying to do something weird and screwy and might not work.
Modifying the data set may really be the simplest solution, but if you really wanted to do this without complicating the query you could try "custom aggregation".
The exact techniques for this depend on the version of SSRS, and my understanding is it didn't really work that well before SSRS 2008.
The idea is, you write some custom code to maintain an array containing the last value for each date. One function updates the "last value" for a date, and another sums the values in the array. Your header calls the latter function; you conspire to cause the former function to be called once for each detail row before the header is processed.
Here's a blog with a write-up that explains the technique in SSRS 2008.
It also gives some insight into how you can try to make this work in SRSS 2005, but again apparently that's not as reliable.