在SSRS中的群组总数

时间:2019-02-23 16:21:24

标签: reporting-services ssrs-2008

我的SQL查询返回:

orderhed_pino_c OrderHed_OrderNum   OrderDtl_OrderLine  calculated_totalsqm
19.0503 50291   1   1.6359
19.0503 50291   1   1.6359
19.0503 50291   2   1.59244
19.0503 50291   2   1.59244
19.0503 50292   1   28.0476
19.0503 50290   1   3.2718
19.0503 50288   1   7.418808
19.0503 50288   1   7.418808
19.0503 50288   1   7.418808
19.0503 50290   3   1
19.0503 50288   1   7.418808
19.0503 50288   1   7.418808
19.0503 50288   1   7.418808
19.0503 50290   4   38.868
19.0503 50288   1   7.418808
19.0503 50288   1   7.418808
19.0503 50288   1   7.418808

在SSRS中,我按OrderHed_OrderNumOrderDtl_OrderLine分组 请看图片。

Query output

我要为calculate_totalsqm总计orderhed_ordernum

但是我得到所有行的总数。

对于orderhed_ordernum = 50291,我有两个orderdtl_orderline 1和2,因此总数应为1.6359 + 1.59244 = 3.22834

result set

但SSRS显示为6.45。

我的数据集查询为:

SELECT Sum(t1)
FROM (
  SELECT [orderhed_ordernum] AS T2
    , Avg([calculated_totalsqm]) AS T1
    , [orderdtl_orderline] AS T3
  FROM dbo.[baqreportresult_" + parameters!tableguid.value + "]
  GROUP BY [orderhed_ordernum], [orderdtl_orderline]
) BB
GROUP  BY t2  

但是我收到以下错误消息:

  

程序Ice.Services.Lib.RunTask引发意外消息,并显示以下消息:RunTask:System.Web.Services.Protocols.SoapException:报表处理期间发生错误。 ---> Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException:报表处理期间发生错误。 ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException:数据集“ TotalSQM”的查询执行失败。 ---> System.Data.SqlClient.SqlException:关键字“ By”附近的语法不正确。****

1 个答案:

答案 0 :(得分:0)

如果要使用参数值来更改Sql语句的文本(即提供数据库,表或字段名称),则将整个Sql语句转换为表达式。右键单击数据集,单击“属性”,然后单击Sql语句旁边的fx按钮以对其进行编辑并将其转换为字符串表达式。输入以下内容:

="SELECT Sum(t1) "
&"FROM ( "
&"  SELECT [orderhed_ordernum] AS T2 "
&"    , Avg([calculated_totalsqm]) AS T1 "
&"    , [orderdtl_orderline] AS T3 "
&"  FROM dbo.[baqreportresult_" & Parameters!tableguid.value & "] "
&"  GROUP BY [orderhed_ordernum], [orderdtl_orderline] "
&") BB "
&"GROUP BY t2 "

因此,这只是将整个Sql括在引号中,将其转换为字符串表达式,然后将参数值插入Sql语句以在运行时计算正确的表名。 Sql语句是在运行时从字符串表达式构建的,从tableguid参数创建所需的表名,然后对数据库执行该语句。

请注意每行末尾的空格,因为这将导致一行Sql。

还要注意,字符串连接使用&而不是+