【问题标题】:Total SUM in SSRS doesnt display corrent numberSSRS 中的总和未显示正确的数字
【发布时间】:2016-08-25 20:30:14
【问题描述】:

原因可能在于我的查询,因为我使用MAX 来获取唯一记录。 但现在我的 SSRS 报告未显示正确的NetWrittenPremium 金额。 这个问题的解决方法是什么? 这是我的查询:

select  b.YearNum,
        b.MonthNum,
        ClassCode,
        QLL.Description,
        SUM( Premium) as NetWrittenPremium
FROM        tblCalendar b  
LEFT JOIN   ProductionReportMetrics prm ON b.MonthNum=Month(prm.EffectiveDate) AND b.YearNum = YEAR(EffectiveDate)  
AND prm.EffectiveDate >=DateAdd(yy, -1, DATEADD(d, 1, EOMONTH(GETDATE()))) AND prm.EffectiveDate <= EOMONTH(GETDATE())  AND CompanyLine = 'Ironshore Insurance Company' 
LEFT JOIN  NetRate_Quote_Insur_Quote Q ON prm.NetRate_QuoteID = Q.QuoteID
LEFT JOIN NetRate_Quote_Insur_Quote_Locat QL ON Q.QuoteID = QL.QuoteID  

LEFT JOIN   (SELECT * FROM NetRate_Quote_Insur_Quote_Locat_Liabi nqI 
            JOIN ( SELECT LocationID as LocID, MAX(ClassCode) as ClCode 
            FROM NetRate_Quote_Insur_Quote_Locat_Liabi  GROUP BY LocationID ) nqA 
            ON nqA.LocID = nqI.LocationID AND nqA.ClCode = nqI.ClassCode ) QLL 
            ON QLL.LocationID = QL.LocationID 

WHERE ( b.YearNum = YEAR(GETDATE())-1 and b.MonthNum >= MONTH(GETDATE())+1 ) OR 
                    ( b.YearNum = YEAR(GETDATE()) and b.MonthNum <= MONTH(GETDATE()) ) 
GROUP BY b.YearNum,b.MonthNum,ClassCode,        QLL.Description

我的 tablix 结构:我正在研究描述和 ClassCode。按SUM(NetWrittenPremium) DESC 对其进行排序,并按SUM(NetWrittenPremium) TOP 10 进行过滤。另一组是 MonthNum。

我添加了一个带有分组表达式 =1 的新组 但仍然相同的错误总数

【问题讨论】:

  • 几个问题:有没有机会让我们看看 tablix 的结构和组?您是否在进行任何静态或基于参数的过滤?
  • 刚刚添加了一些关于我的 Tablix 结构的信息

标签: sql tsql reporting-services sum


【解决方案1】:

我相信您的问题是您的组正在过滤 前 10 名,但总行没有。

为您的总行添加一个新组Add Group -> Adjacent below。将其分组为 1(因此将它们全部分组)。然后使用与其他单元格相同的表达式(如果还没有,请添加 SUM)。将相同的 TOP 10 过滤器添加到新组。

【讨论】:

  • 是的,我正在过滤 TOP 10,但总计算所有值。我添加了新组。在一个组表达式中,我说=1,应用了过滤表达式:SUM(NetWrittenPremium) = TOP 10 但它仍然给我同样的错误总数。我错过了什么吗?
【解决方案2】:

这里的问题是组过滤器不适用于聚合函数。所以 您的 SUM() 正在收集所有内容。来自总计、聚合和内置集合的表达式范围 (https://msdn.microsoft.com/en-us/library/dd255256.aspx) 的 MSDN 文档:

计算数据的聚合时不使用组过滤器 地区。

如果可能,最好将前 10 个语句移到查询中。

如果这不是一个选项,您应该可以改用“排名”表达式。在详细级别创建一个“总计”行,使用 RunningValue 计算运行美元值。然后将可见性标准设置为:

=RunningValue(Fields!ClassCode.Value,CountDistinct,Nothing) <> 10  

编辑:显然有一个 MSDN 线程涵盖了这种情况。 https://social.msdn.microsoft.com/Forums/sqlserver/en-US/0b21bab0-ff02-4655-a69c-efedfb2a7077

【讨论】:

  • 这是总行中的表达式,NetWrittenPremiumCell =RunningValue(Fields!NetWrittenPremium.Value,SUM,"DataSet1") 正确吗?但是,我的查询中没有列 Rank,如何隐藏这种可见性?
  • 在快速检查中,我找到了一个 MSDN 线程并将其链接到上面以供参考。我还修改了答案,以包括我在那里看到的更清晰的可见性表达式。
  • 嘿 Bitnine,你知道有什么其他方式可以联系来自 Social.msdn.com 的那些人吗?我真的需要解决这个问题。顺便说一句,感谢您的时间和资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 1970-01-01
  • 2015-08-09
相关资源
最近更新 更多