Sql server 如何显示2012年SSRS总金额前10名

Sql server 如何显示2012年SSRS总金额前10名,sql-server,tsql,reporting-services,ssrs-2012,Sql Server,Tsql,Reporting Services,Ssrs 2012,我只需要显示前10名基于总SUMPremium列的类。 我去了SumNetwritenPremium的group ClassCode properties->Filters并设置了前10名,但它不起作用 我只需要显示前10名,而且总金额应仅为这10名 我不知道如何实现它 我的问题是: ;WITH cte_TopClasses AS ( SELECT c.YearNum, c.MonthNum, DD.ClassCode, IS

我只需要显示前10名基于总SUMPremium列的类。 我去了SumNetwritenPremium的group ClassCode properties->Filters并设置了前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
以及我的查询结果:

@艾伦 谢谢 查询输出如下所示:

如果我在密级中按顺序添加类代码,那么$142000不会出现在查询中。这不好


还有其他想法吗?也许我可以使用分区函数?

在组属性中添加排序和设置

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
现在应该不需要在SSR中进行任何过滤,只需按rnk列进行排序


你唯一剩下的问题是,如何确定最后的结果中哪一个具有相同的总优先级。您可以做一些事情,比如将类代码添加到按字母顺序选择的对象的稠密_秩函数中,但是:;我想这由你来决定。

艾伦,谢谢。但我就是这么做的。它仍然会为我生成11行,总计11行。是否有两个值相同的总计?无论如何我注意到,通过在组内过滤,总数将不起作用,因此我将在5-10分钟内更新答案