在SSRS中划分两个表值

时间:2015-12-10 08:29:51

标签: sql reporting-services

我的报告中有两张表:

enter image description here

我想将Scrap中的值除以Table Total

中的值

- > (16227/425841)* 100

这是代码:

Select date as Datetime, tevent.name as Event, SUM(value) as sum

    from tCount inner join tEvent ON tCount.eventid = tevent.id
             where Name in ('Drive  Fast', 'Drive Slow')
               and date > getdate() -1
               and tevent.Name in ('E01','E02','E03','E04','E05','E06','E07','E08')
           and CalName = 'Drive'

这些的总和:'E01','E02','E03','E04','E05','E06','E07','E08',我在报告中这样做:Sum (字段!E01.Value +字段!E02.Value +字段!E03.Value + ...

对于另一张表,它看起来像这样:

Select date as Datetime, tevent.name as Event, SUM(value) as sum

        from tCount inner join tEvent ON tCount.eventid = tevent.id
                 where Name in ('Drive Normal')
                   and date > getdate() -1
                   and tevent.Name in ('E01','E02','E03','E04','E05','E06','E07','E08')
               and CalName = 'Drive'

我必须对这两个陈述进行划分。 但是,如果我将Total的值放入Scrap Expression中,那么结果就是错误的。希望你能帮帮我。

1 个答案:

答案 0 :(得分:1)

根据我对您的问题的理解,您有两个数据集,并且您想要计算总计的报废百分比

为了复制你的问题,我创建了两个DataSet,如下所示

Scrap Dataset
myDateTime  Event  mySum
01/01/2015  Scrap  16227 
02/01/2015  Scrap  14637 
03/01/2015  Scrap  14174

Total Dataset
myDateTime  Event  mySum
01/01/2015  Total  425841 
02/01/2015  Total  434024 
03/01/2015  Total  405216

在报告中创建一个表,并将第1列设置为mySum

ScrapDataSet

然后,您可以使用第2列中的LOOKUP函数从另一个数据集中查找特定值,假设存在公共字段。在这个例子中

=Lookup(Fields!myDateTime.Value, 
        Fields!myDateTime.Value, 
        Fields!mySum.Value, 
        "TotalDataSet")

myDateTime中的ScrapDataSetmyDateTime中的TotalDataSet进行比较,并在mySum

中返回匹配的TotalDataSet

然后,您可以按如下方式组合这两个表达式,以获得第3列

中所需的百分比
=Fields!mySum.Value / 
 (Lookup(Fields!myDateTime.Value, 
         Fields!myDateTime.Value, 
         Fields!mySum.Value, 
         "TotalDataSet"))

在这个例子中,我将第三列格式化为2位小数的百分比格式。

这些步骤会产生一个看起来像这样的表

enter image description here

希望这是您需要的输出。如果您需要进一步的帮助,请询问原始问题的澄清。

作为最后的注释,Sum和DateTime不是推荐的字段名称,因为这些都是可以在SSRS中用来定义执行函数类型的关键字。这些应该真正重命名 - 正如我在上面的例子中所做的那样。