手动在SSRS中的组中聚合或汇总数据字段

时间:2013-07-09 16:52:18

标签: reporting-services ssrs-2008 aggregate-functions ssrs-grouping

我有一张销售表和折扣表。

主数据集是Sales表,每人都有销售额。

每个人只与一个项目相关联,每个项目只有一名主管。

第二个数据集 - 折扣表包含每个项目的折扣条目

Sales Table

Supervisor  | Company   |Project    |Person |Sale
Adam        | CompanyA  |CompA-01   |Amy    |100
Adam        | CompanyA  |CompA-02   |Beth   |200
Adam        | CompanyA  |CompA-02   |Cary   |200
Jenny       | CompanyA  |CompA-05   |Dawn   |300
Jenny       | CompanyA  |CompA-05   |Emma   |400



Discounts table

Company | Project   |Month  |Amount
CompanyA| CompA-02  |Jan    |500
CompanyA| CompA-02  |Feb    |500
CompanyA| CompA-05  |Jan    |1000

我想显示一个报告,其中折扣字段的计算方法如下

Supervisor  | Company   |Project    |Person |Sales  |Discounts 
Adam                            
          CompanyA                           500       1000 <---HELP CALCULATE THIS
                         CompA-01            100       0
                                      Amy    100
                         CompA-02            400       1000
                                      Beth   200
                                      Cary   200
...
...
TOTAL                                        12000     2000                                                            

我的报告中有以下行组:

Supervisor Group
---Company Group
-----Project Group
----------Details

我能够在Project Grouping级别计算Discount列,如下所示

=Code.SumLookup(LookupSet(Fields!Project.Value,Fields!Project.Value,Fields!amount.Value,"Discounts"))

然后在总水平我计算折扣为:

=Sum(Fields!amount.Value, "Discounts")

我需要帮助弄清楚如何计算公司和主管级别的折扣总和。


正如你们许多人建议我的问题是我的问题,我只想继续并准确演示我面临的问题。

根据建议,我使用连接重新设计了查询

SELECT Sales.Supervisor, Sales.Company, Sales.Project, Sales.Person, Sales.SaleAmt, SUM(Discounts.Amount)
FROM Sales 
LEFT OUTER JOIN Discounts 
ON Sales.Company = Discounts.Company 
AND Sales.Project = Discounts.Project 
group by Sales.Supervisor, Sales.Company, Sales.Project, Sales.Person, Sales.SaleAmt, Discounts.Amount

创建了一个类似

的报告

enter image description here

报告预览如此enter image description here

请注意折扣值如何总结错误。我该怎么做才能纠正这个问题?

3 个答案:

答案 0 :(得分:1)

你为自己做了太多工作恕我直言的代码做了。 SSRS内置于了解您所在分组的级别。 EG:如果我有一个像Sum(Discount)这样的函数的细节级别,那么我添加一个'Project'分组并选择添加一个'header'行。如果我将该计算放在“详细信息”行上方的新行中,您现在将按其他数据进行分组。然后,您可以按公司和公司监督等对项目进行分组。然后,您可以在不同的行上添加相同的计算,只需知道其所处的级别即可实现不同的值。

答案 1 :(得分:0)

不是编写复杂的表达式或嵌套查询来连接这两个数据集,而是添加一个单独的数据集来获取查找所需的数据。例如,添加一个名为CompanyDiscounts的数据集,如下所示:

select Company, sum(Amount) as Discount
from DiscountsTable

现在您可以添加查找功能以获得公司级别的总折扣。

=Lookup(Fields!Company.Value, Fields!Company.Value, Fields!Discount.Value, "CompanyDiscounts")

您可以为Suporvisor级别重复这些步骤。

通常我不会推荐这样的方法,但数据结构的性质适合这种解决方法。理想情况下,您将拥有一个具有相关折扣的销售ID,以便您可以在一个查询中加入所有相关数据,并使用分组聚合来填写表格。

答案 2 :(得分:0)

请使用以下查询

SELECT Sales.Supervisor, 
       Sales.Company, 
       Sales.Project, 
       Sales.Person, 
       Sales.Sale, 
       Discounts.Amount
FROM  Sales 
LEFT OUTER JOIN Discounts ON Sales.Company = Discounts.Company 
                          AND Sales.Project = Discounts.Project
GROUP BY Sales.Supervisor, 
         Sales.Company, 
         Sales.Project, 
         Sales.Person, 
         Sales.Sale, 
         Discounts.Amount

在数据集中,在表格模式的帮助下,您将能够生成报告。 我已经尝试过它并且有效。