基于总量在SSRS 2012
问题描述:
如何显示前10名,我需要根据Total
(SUM(Premium))
栏只显示前10 Class
。 我去组的ClassCode属性 - >筛选和SUM(NetWrittenPremium)设置前10,但它不工作。
我需要只显示前10个,并且还总量应为只有那些10.
广东话了解如何实现它。
这里是我的查询:
;WITH cte_TopClasses
AS (
SELECT
c.YearNum,
c.MonthNum,
DD.ClassCode,
ISNULL(SUM(prm.Premium),0) as NetWrittenPremium
FROM tblCalendar c
LEFT JOIN ProductionReportMetrics prm ON c.YearNum = YEAR(prm.EffectiveDate) and c.MonthNum = MONTH(prm.EffectiveDate)
AND CompanyGUID = '18E04C99-D796-4CFA-B1E7-28328321C8AD'
LEFT JOIN [dbo].[Dynamic_Data_GLUnitedSpecialty] DD on prm.QuoteGUID = DD.QuoteGuid
WHERE (c.YearNum = YEAR(GETDATE())-1 and c.MonthNum >= MONTH(GETDATE())+1) OR
(c.YearNum = YEAR(GETDATE()) and c.MonthNum <= MONTH(GETDATE()))
GROUP BY c.YearNum,
c.MonthNum,
DD.ClassCode--,prm.Premium
)
SELECT ROW_NUMBER() OVER (PARTITION BY ClassCode ORDER BY NetWrittenPremium DESC),*
FROM cte_TopClasses
,并从查询结果我:
@Alan ŧ汉克斯。 查询输出的样子说:
如果我在order by
在dense_rank
添加ClassCode那么$ 142,000不是要去是查询。哪个不好。
还有其他想法吗?也许我可以使用partition
函数?
答
在组属性添加排序,并设置
Sort by expression "=Sum(NetWrittenPremium)"
Order = "Z to A"
他们在过滤器如下:
Expression = "=Sum(NetWrittenPremium)"
Operator = Top N
Value = 10
其实我刚刚注意到总计行....这将不能正确计算总数,并且您不能在Tablix的过滤器中使用聚合(否则可能会有效)。
最好的办法是推回到服务器,并在那里做到这一点。
,我不能对你的数据测试这种直接,但它应该工作,我对类似成才测试...
SELECT r.* FROM
(SELECT d.*
, dense_rank() OVER(ORDER BY TotalNWP Desc) AS rnk
FROM
(SELECT DISTINCT
ClassCode, YearNum, MonthNum
, SUM(t.NetWrittenPremium) OVER (PARTITION BY ClassCode, YearNum, MonthNum) AS NetWrittenPremium
, SUM(t.NetWrittenPremium) OVER (PARTITION BY ClassCode) AS TotalNWP
FROM cte_TopClasses t
) d
) r
WHERE rnk <=10
现在应该没有必要做任何SSRS过滤,只是排序rnk
列。
你唯一存在的问题是如何确定哪个最后的结果(它们全部具有相同的总数)优于其他结果。你可以做一些事情,比如将ClassCode添加到dense_rank函数中,以便按字母顺序选择它们;但是对于你来说,我可以决定。
Alan谢谢。但那就是我一直在做的事情。它仍然生成11行,共11行。 – Oleg
你有2个具有相同价值的汇总?无论如何。我注意到Totals无法在组内过滤,因此我正在更新答案(5 - 10分钟) –