calculating weighted averages on an SRS report


I have been around in circles with this and cannot figure this out. I am trying to get the weighted average on a sql report based on a count and an amount.

So first I get the average price of something we sell by creating an expression: Price/Count
(it will not let me do a calc field because I am using the count aggregate function)
We only sell 4 major items, which I am basing my report on. So I know that the next step is to take each of my item's average price, multiply it by the count for that item, add up those totals, then divide by the total count.

I have tried variations on this expression:
=(SUM((Fields!CRDTAMNT.Value/COUNT(Fields!ACCOUNT.Value))* COUNT(Fields!ACCOUNT.Value)))/COUNT(Fields!ACCOUNT.Value)

(Account is the count) and I keep getting errors about nested aggregate functions.

Does anyone know how to do this?

Who is Participating?
erp1022Connect With a Mentor Author Commented:
Yes it displays 'Error' because as I said in previous comment, the equation is wrong. That's why I put in this request, because I need to know how to do this correctly.

Calculating the result manually has no bearing on how this should be done in SQL, but if you really want to know, multiply each service fee by the count, add those up, then divide by the total count.

If you are unsure or don't know how to do this, that's fine, but let someone else step in. I do need to get this resolved.
Alfred A.Commented:
First of all, are you using a Tablix Control for the SQL report you are trying to display?  How do you display these 4 major items?  You are getting aggregate function errors because the functions you are using are possibly being used in individual records/cells are not for groups.  For all we know, your equation might be just something like the following since Account is the count already.

=(SUM((Fields!CRDTAMNT.Value/Fields!ACCOUNT.Value)* Fields!ACCOUNT.Value))/Fields!ACCOUNT.Value

Can you provide a sample of the SQL report you are trying to work on, if possible, so that we can visualized what you are trying to do?
erp1022Author Commented:
Not sure what you mean by using a Tablix Control, so not sure whether or not I'm using it. I am displaying our items by selecting them from an embedded query. Do you need to see that?

When you say a sample of the report, what exactly are you looking for? the actual rdl file?

Please see attachment, this is a screenshot and has some explanations of what I'm trying to achieve.
What Kind of Coding Program is Right for You?

There are many ways to learn to code these days. From coding bootcamps like Flatiron School to online courses to totally free beginner resources. The best way to learn to code depends on many factors, but the most important one is you. See what course is best for you.

Alfred A.Commented:
You are using a Tablix (Table) Control.  OK, I don't know if I understand it correctly but it looks like you have an error in your equation.

1.  You mention that Average Acquisition price is


2.  Then, you multiply the count of each item against the average acquisition price and then divide by total count.

=(((Sum(Fields!CRDTAMNT.Value))/(COUNT(Fields!ACCOUNT.Value))) * (COUNT(Fields!ACCOUNT.Value)) / COUNT(Fields!ACCOUNT.Value)

There is definitely wrong with this one as it will just cancel out the multiplied and divided.

OK.  Why don't you just focus on the "Total" row for your weighted average?  I guess you added the totals using "Add Total".  You can just apply =(Sum(Fields!CRDTAMNT.Value))/(COUNT(Fields!ACCOUNT.Value))  under the totals (expression field you are after) of the Average Acquisition column.  The values for the fields at this point are the values in the fifth row of your report (total row).

I just hope this would help and I understand what is your problem really are.

Alfred A.Commented:
Also, check the following link for further details on Calculating Totals
erp1022Author Commented:
What I need to calculate is the *WEIGHTED AVERAGE*. It's not a mathematical average, which would be to total everything and divide by some number. For a weighted average you have to multiply each number by the value specific to that number, add those totals, then divide by the total value.

Based on what I described in my above emails and the screen shot I added, does anyone know how to do this in the SSRS report interface or how to code it in my query?
Alfred A.Commented:
Actually, now that you mention about your query, why don't you apply all the calculations outside of SSRS and do it SQL Server 2008?

The way I do things is that my data warehouse consist of actual transformed values from the original OLTP (production) database.  All my complex calculations are done at the transform level.  And then in my SSRS report, I just access the resulting dataset straightforward without any complex expressions.  Of course, take note that there will still be expressions to be used but mostly at a simple level.

Also I understand you are trying to get the weighted average but it is not really clear.  Do you have any sample Preview of your report?

OK.  Correct me if I am wrong based on my sample data below.  Note that these are sample values based on your columns

Item1     5      600    [Sum[SvcFee]      600/5
Item2     8      500            ""                 500/4
Item3     7      400            ""                 400/7
Item4     4      300            ""                 300/4

Total      24     1800                           (600/5 + 500/4 + 400/7 + 300/4)  / 4

OK.  What did I missed above?  Note that I know what you are trying to do but I need to understand your data!  Please provide more info.
Alfred A.Commented:
Oh by the way, the items in my sample data in my previous post are grouped items (i.e. Item1, etc.).
erp1022Author Commented:
I have attached a screen shot of the preview of my report, but I don't think that will help. I can't get any weighted average expressions to work, so now it just displays as 'Error'

What would the code/syntaxt be in SQL to calculate a weighted average?

You asked me for more information, but I have no idea what you are looking for so please let me know specifically what you need.
Alfred A.Commented:
Yes.  This is more like it.  Based on your sample report, what is your expected weighted average result when calculated manually?  I can see in your sample report that it displays "Error".

Alfred A.Commented:
Well, when I ask clarification, other experts will see this as well.  So, it would not only help me understand your problem but others as well.  Obviously, people would ask questions in order to clarify issues.  Also, other experts are anytime free to comment if they wish.   You have to understand, this is not about being unsure or not knowing what to do but trying to understand the underlying problem.  

Anyway, I do hope you resolve your problem as soon as possible and I will stop at this point and let others help you if you wish.  Goodluck!
Alfred A.Commented:

For the record, it is not that I don't know how to answer, you mentioned to let someone else step in, so I stopped!

For your information, I am not being paid to help you and if you are trying to be personal on this, you are very unprofessional!

erp1022Author Commented:
It seems as though person who is responding does not know the answer. It's a simple straighforward question on how to code a calculated field in sql.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.