在表的行中添加差异

时间:2016-02-05 11:40:53

标签: reporting-services

我有一份SSRS报告,如下所示,

--------------------------------
Year Product Total customers
--------------------------------
2015 prd1      100
     prd2       50
     prd3       60

2014 prd1       80
     prd2       60
     prd3       60

Varience
    Prd1        20
    Prd2       -10
    Prd3         0

我完成了年度分组和数据映射。但我不确定如何根据当年的每个产品在每一行中添加差异(2015-2014之间)

更新

我的数据集看起来像这样

Year    CategoryId  CategoryDesc    TotalCustomerCount  
2013    Prd1        Testproduct     100
2013    Prd2        Testprod2       50
2013    Prd3        Tesrprod3       45
2014    Prd1        Testproduct     80
2014    Prd2        Testprod2       60

您可以看到一些产品可能会在一年内漏掉。

注意:数据集是从Dimesional多维数据集创建的,而不是从SQL查询创建的。

2 个答案:

答案 0 :(得分:2)

如果不知道您当前的数据集是什么样的话,很难准确地说出来。

但我相信Stanislovas'示例对您没什么用处,因为他的示例仅在您的数据集对每个产品都有一行时才有效,每列的总数为每年。由于您使用行分组来获得上述结果,我猜你没有。如果您这样做了,您可以使用列分组而不是行分组来获得更好的概述。

您有两种可能性:

  1. 使用包含每年值列的数据集完全替换当前数据集(例如在Stanislovas'示例中)。要实现此类数据集,您需要查询如下所示:

    SELECT DISTINCT(myTable.Product), t1.Total AS 'Total2014', t2.Total AS 'Total2015'
    FROM myTable 
    JOIN (SELECT Product, SUM(Total) AS Total
       FROM myTable
       WHERE Year = 2014
       GROUP BY Product) as t1 ON t1.Product = myTable.Product
    JOIN (SELECT Product, SUM(Total) AS Total
       FROM myTable
       WHERE Year = 2015
       GROUP BY Product) as t2 ON t2.Product = myTabel.Product
    

    然后可以使用它来创建一个如下所示的表:

    ---------------------------------------
    | Product  | 2014  | 2015  | Variance |
    ---------------------------------------
    | prd1     | 100   | 80    | 20       | 
    | prd2     | 50    | 60    | -10      | 
    | prd3     | 60    | 60    | 0        | 
     ...
    
  2. 或者您可以添加第二个已计算出这些差异的数据源,然后再将其发送给报告者。以下是一个帮助您查询的示例:https://stackoverflow.com/a/15002915/4579864
  3. 如果您需要更多帮助,请发表评论,我会尝试解释更多信息。这至少应该让你开始。

答案 1 :(得分:1)

我认为处理此requeriment的最简单方法是使用T-SQL从查询生成数据。但是,您需要的输出可以使用与更新中提供的数据集结构相同的数据集从SSRS生成。

为了重新创建场景,我使用了这个数据集。

Year    Product     CategoryDesc    TotalCustomerCount  
2013    Prd1        Testproduct     100
2013    Prd2        Testprod2       50
2013    Prd3        Tesrprod3       45
2014    Prd1        Testproduct     80
2014    Prd2        Testprod2       60

我的方法是获取最小和最大年份值(2013年和2014年)以及每行中的产品,并查看TotalCustomerCount以减去它。这是一个循序渐进的指南。

首先,在数据集中创建一个计算字段。右键单击“报表数据”窗格中的数据集,将其命名为Year_Product,并在字段源文本框中设置此表达式。

=Fields!Year.Value & "-" & Fields!Product.Value

这将生成一个名为Year_Product的附加字段,其中YearProduct字段与中间的-字符连接在一起。例如:2013-Prd12014-Prd12013-Prd3等。

现在使用此数据排列创建一个Tablix:

enter image description here

在以红色突出显示的单元格中使用此表达式:

=Lookup(Max(Fields!Year.Value,"DataSet13") & "-" &
Fields!Product.Value,Fields!Year_Product.Value,Fields!TotalCustomerCount.Value,"DataSet13")
-
Lookup(Min(Fields!Year.Value,"DataSet13") & "-" &
Fields!Product.Value,Fields!Year_Product.Value,Fields!TotalCustomerCount.Value,"DataSet13")

这将在Year_Product字段中查找行的最大年份和产品,并获取TotalCustomerCount。

Year_Product:2014-Prd1和TotalCustomerCount:80

Year_Product:2013-Prd1和TotalCustomerCount 100

以上示例自-20

生成80 - 100 = -20

它会向我们展示重复的产品,因为每种产品可能会出现两次。为避免这种情况,有必要按产品对Tablix进行排序,转到tablix属性并设置以下排序选项。

enter image description here

现在隐藏重复的行。转到Tablix属性/行可见性,然后选择基于表达式显示或隐藏。

enter image description here

使用此表达式有条件地隐藏重复的产品:

=IIF(
Fields!Product.Value=PREVIOUS(Fields!Product.Value),
true,
false
)

最后,如果您预览报告,您将看到类似的内容(我重新创建了两个表格。)

enter image description here

  

注意我只使用一个数据集,与您在数据集中提供的数据集相同   问题

希望您所寻找的内容让我知道您是否需要进一步的帮助。