我有一份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查询创建的。
答案 0 :(得分:2)
如果不知道您当前的数据集是什么样的话,很难准确地说出来。
但我相信Stanislovas'示例对您没什么用处,因为他的示例仅在您的数据集对每个产品都有一行时才有效,每列的总数为每年。由于您使用行分组来获得上述结果,我猜你没有。如果您这样做了,您可以使用列分组而不是行分组来获得更好的概述。
您有两种可能性:
使用包含每年值列的数据集完全替换当前数据集(例如在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 |
...
如果您需要更多帮助,请发表评论,我会尝试解释更多信息。这至少应该让你开始。
答案 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
的附加字段,其中Year
和Product
字段与中间的-
字符连接在一起。例如:2013-Prd1
,2014-Prd1
,2013-Prd3
等。
现在使用此数据排列创建一个Tablix:
在以红色突出显示的单元格中使用此表达式:
=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属性并设置以下排序选项。
现在隐藏重复的行。转到Tablix属性/行可见性,然后选择基于表达式显示或隐藏。
使用此表达式有条件地隐藏重复的产品:
=IIF(
Fields!Product.Value=PREVIOUS(Fields!Product.Value),
true,
false
)
最后,如果您预览报告,您将看到类似的内容(我重新创建了两个表格。)
注意我只使用一个数据集,与您在数据集中提供的数据集相同 问题
希望您所寻找的内容让我知道您是否需要进一步的帮助。