calculating weighted averages on an SRS report

Posted on 2010-11-11
Medium Priority
Last Modified: 2012-05-10

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?

Question by:erp1022
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 8
  • 5
LVL 21

Expert Comment

ID: 34120456
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?

Author Comment

ID: 34120703
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.
LVL 21

Expert Comment

ID: 34121442
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.

Optimize your web performance

What's in the eBook?
- Full list of reasons for poor performance
- Ultimate measures to speed things up
- Primary web monitoring types
- KPIs you should be monitoring in order to increase your ROI

LVL 21

Expert Comment

ID: 34121461
Also, check the following link for further details on Calculating Totals


Author Comment

ID: 34121668
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?
LVL 21

Expert Comment

ID: 34121937
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.
LVL 21

Expert Comment

ID: 34122037
Oh by the way, the items in my sample data in my previous post are grouped items (i.e. Item1, etc.).

Author Comment

ID: 34123544
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.
LVL 21

Expert Comment

ID: 34126105
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".


Accepted Solution

erp1022 earned 0 total points
ID: 34128643
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.
LVL 21

Expert Comment

ID: 34129356
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!
LVL 21

Expert Comment

ID: 34133160

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!


Author Closing Comment

ID: 34171187
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.

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

The Delta outage: 650 cancelled flights, more than 1200 delayed flights, thousands of frustrated customers, tens of millions of dollars in damages – plus untold reputational damage to one of the world’s most trusted airlines. All due to a catastroph…
In part one, we reviewed the prerequisites required for installing SQL Server vNext. In this part we will explore how to install Microsoft's SQL Server on Ubuntu 16.04.
Using examples as well as descriptions, and references to Books Online, show the documentation available for date manipulation functions and by using a select few of these functions, show how date based data can be manipulated with these functions.
Via a live example, show how to extract insert data into a SQL Server database table using the Import/Export option and Bulk Insert.
Suggested Courses

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question