如何在 SSRS 2012 的堆积图中将总计显示为单独的条形图

How can I display Grand Total as a separate bar in stacked chart in SSRS 2012

如何在堆叠图表中将 Grand Total 显示为单独的条形图? 我按 New BusinessRenewal 类别组细分。那么我怎样才能有另一个顶部栏显示 New BusinessRenewal 的总和 $? 类似的东西:

编辑:

下面是我的主要 SELECT 声明。我创造了 在第一个 UNION ALL 中,我创建了 'EQGrandTotal' 作为另一个 BusinessType,然后我总结了按描述细分的所有类型的保费。

   SELECT   SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Bound'         THEN [Bound Premium] ELSE 0 END) as EQBoundNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Lost'          THEN [LostPremium] ELSE 0 END) as EQLostNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Not Taken Up'  THEN [NotTakenUpPremium] ELSE 0 END) as EQNtUpNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Quoted'        THEN [QuotedPremium] ELSE 0 END) as EQQuotedNB,
                    /* Earthquake, Renewal, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Bound'          THEN [Bound Premium] ELSE 0 END) as EQBoundRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Lost'           THEN [LostPremium] ELSE 0 END) as EQLostRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Not Taken Up'   THEN [NotTakenUpPremium] ELSE 0 END) as EQNtUpRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Quoted'         THEN [QuotedPremium] ELSE 0 END) as EQQuotedRN,

                /* Wind, New Business, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Bound'           THEN [Bound Premium] ELSE 0 END) as WindBoundNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Lost'            THEN [LostPremium] ELSE 0 END) as WindLostNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Not Taken Up'    THEN [NotTakenUpPremium] ELSE 0 END) as WindNtUpNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Quoted'          THEN [QuotedPremium] ELSE 0 END) as WindQuotedNB,
                /* Wind, Renewal, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Bound'        THEN [Bound Premium] ELSE 0 END) as WindBoundRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Lost'         THEN [LostPremium] ELSE 0 END) as WindLostRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Not Taken Up' THEN [NotTakenUpPremium] ELSE 0 END) as WindNtUpRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Quoted'       THEN [QuotedPremium] ELSE 0 END) as WindQuotedRN,
        CASE WHEN LineOfCoverage = 'Earthquake' THEN  'Earthquake' ELSE 'Wind' END as LineOfCoverage,
        'Earthquake' as Earthquake,
        'Wind' as Wind,
        BusinessType,
        Description,
        NULL as Total
FROM    cte_Quotes
GROUP BY LineOfCoverage,BusinessType,Description
UNION ALL 
SELECT 
        NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
        CASE WHEN LineOfCoverage = 'Earthquake' THEN  'Earthquake' ELSE 'Wind' END as LineOfCoverage,
        NULL,
        NULL,
        'EQGrandTotal' as BusinessType,
        --NULL,
        Description, -- description
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Bound'         THEN [Bound Premium] ELSE 0 END)+
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Lost'          THEN [LostPremium] ELSE 0 END) +
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Not Taken Up'  THEN [NotTakenUpPremium] ELSE 0 END)+
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Quoted'        THEN [QuotedPremium] ELSE 0 END) +
                    /* Earthquake, Renewal, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Bound'          THEN [Bound Premium] ELSE 0 END)+
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Lost'           THEN [LostPremium] ELSE 0 END) +
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Not Taken Up'   THEN [NotTakenUpPremium] ELSE 0 END)+
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Quoted'         THEN [QuotedPremium] ELSE 0 END) as Total   
FROM    cte_Quotes
GROUP BY Description,LineOfCoverage,BusinessType

所以我得到了另一个 "BusinessType" 组,但是线条是纯色的。 我对 Total 列的表达式:

=Sum(IIF(Fields!BusinessType.Value = "EQGrandTotal" and Fields!LineOfCoverage.Value = "Earthquake", Fields!Total.Value,0))

编辑 2: @理查兹 删除了 UNION ALL 并添加了 4 个新列:

SELECT  SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Bound'         THEN [Bound Premium] ELSE 0 END) as EQBoundNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Lost'          THEN [LostPremium] ELSE 0 END) as EQLostNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Not Taken Up'  THEN [NotTakenUpPremium] ELSE 0 END) as EQNtUpNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Quoted'        THEN [QuotedPremium] ELSE 0 END) as EQQuotedNB,
                    /* Earthquake, Renewal, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Bound'          THEN [Bound Premium] ELSE 0 END) as EQBoundRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Lost'           THEN [LostPremium] ELSE 0 END) as EQLostRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Not Taken Up'   THEN [NotTakenUpPremium] ELSE 0 END) as EQNtUpRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Quoted'         THEN [QuotedPremium] ELSE 0 END) as EQQuotedRN,

                /* Wind, New Business, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Bound'           THEN [Bound Premium] ELSE 0 END) as WindBoundNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Lost'            THEN [LostPremium] ELSE 0 END) as WindLostNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Not Taken Up'    THEN [NotTakenUpPremium] ELSE 0 END) as WindNtUpNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Quoted'          THEN [QuotedPremium] ELSE 0 END) as WindQuotedNB,
                /* Wind, Renewal, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Bound'        THEN [Bound Premium] ELSE 0 END) as WindBoundRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Lost'         THEN [LostPremium] ELSE 0 END) as WindLostRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Not Taken Up' THEN [NotTakenUpPremium] ELSE 0 END) as WindNtUpRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Quoted'       THEN [QuotedPremium] ELSE 0 END) as WindQuotedRN,
        CASE WHEN LineOfCoverage = 'Earthquake' THEN  'Earthquake' ELSE 'Wind' END as LineOfCoverage,
        'Earthquake' as Earthquake,
        'Wind' as Wind,
        BusinessType,
        Description,

/*  Test @Richards*/

        SUM(CASE WHEN  Description = 'Bound'        THEN [Bound Premium] ELSE 0 END) as TotalBound,
        SUM(CASE WHEN Description = 'Lost'          THEN [LostPremium] ELSE 0 END) as TotalLost,
        SUM(CASE WHEN  Description = 'Not Taken Up' THEN [NotTakenUpPremium] ELSE 0 END) as TotalNTU,
        SUM(CASE WHEN  Description = 'Quoted'       THEN [QuotedPremium] ELSE 0 END) as TotalQuoted
FROM    cte_Quotes
GROUP BY LineOfCoverage,BusinessType,Description

SSRS 中的结果: 我在图表数据中添加了 SUM(TotalBound) 作为一个值,看起来总数会出现在条形图的顶部。

编辑 3: 为每个 Description

添加了带有 TotalsUNION ALL 语句
SELECT  SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Bound'         THEN [Bound Premium] ELSE 0 END) as EQBoundNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Lost'          THEN [LostPremium] ELSE 0 END) as EQLostNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Not Taken Up'  THEN [NotTakenUpPremium] ELSE 0 END) as EQNtUpNB,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'New Business' AND Description = 'Quoted'        THEN [QuotedPremium] ELSE 0 END) as EQQuotedNB,
                    /* Earthquake, Renewal, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Bound'          THEN [Bound Premium] ELSE 0 END) as EQBoundRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Lost'           THEN [LostPremium] ELSE 0 END) as EQLostRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Not Taken Up'   THEN [NotTakenUpPremium] ELSE 0 END) as EQNtUpRN,
        SUM(CASE WHEN LineOfCoverage = 'Earthquake' AND BusinessType = 'Renewal' AND Description = 'Quoted'         THEN [QuotedPremium] ELSE 0 END) as EQQuotedRN,

                /* Wind, New Business, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Bound'           THEN [Bound Premium] ELSE 0 END) as WindBoundNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Lost'            THEN [LostPremium] ELSE 0 END) as WindLostNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Not Taken Up'    THEN [NotTakenUpPremium] ELSE 0 END) as WindNtUpNB,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'New Business' AND Description = 'Quoted'          THEN [QuotedPremium] ELSE 0 END) as WindQuotedNB,
                /* Wind, Renewal, by Description */
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Bound'        THEN [Bound Premium] ELSE 0 END) as WindBoundRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Lost'         THEN [LostPremium] ELSE 0 END) as WindLostRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Not Taken Up' THEN [NotTakenUpPremium] ELSE 0 END) as WindNtUpRN,
        SUM(CASE WHEN LineOfCoverage = 'Wind' AND BusinessType = 'Renewal' AND Description = 'Quoted'       THEN [QuotedPremium] ELSE 0 END) as WindQuotedRN,
        CASE WHEN LineOfCoverage = 'Earthquake' THEN  'Earthquake' ELSE 'Wind' END as LineOfCoverage,
        'Earthquake' as Earthquake,
        'Wind' as Wind,
        BusinessType,
        Description,
        NULL as TotalBound,
        NULL as TotalLost,
        NULL as TotalNTU,
        NULL as TotalQuoted

FROM    cte_Quotes
GROUP BY LineOfCoverage,BusinessType,Description
UNION ALL 
SELECT  NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
        LineOfCoverage,--CASE WHEN LineOfCoverage = 'Earthquake' THEN  'Earthquake' ELSE 'Wind' END as LineOfCoverage,
        'Earthquake' as Earthquake,
        'Wind' as Wind,
        'Grand Total' as BusinessType,
        --NULL,
        Description, -- description
        SUM(CASE WHEN  Description = 'Bound'        THEN [Bound Premium] ELSE 0 END) as TotalBound,
        SUM(CASE WHEN Description = 'Lost'          THEN [LostPremium] ELSE 0 END) as TotalLost,
        SUM(CASE WHEN  Description = 'Not Taken Up' THEN [NotTakenUpPremium] ELSE 0 END) as TotalNTU,
        SUM(CASE WHEN  Description = 'Quoted'       THEN [QuotedPremium] ELSE 0 END) as TotalQuoted
FROM    cte_Quotes
GROUP BY Description,LineOfCoverage,BusinessType    

SSRS 中的结果:

如我原来的评论所述,将 UNION 添加到 SQL 以将汇总数据汇总到适当的级别使这成为可能。

当工具不为您汇总时,这是编写报告的有用技巧。

这是一个简单的例子(来自我手边的数据库):

SELECT T.account_type_desc AS category, COUNT(1) AS cnt
FROM account A JOIN account_type T
ON A.account_type_key = T.account_type_key
GROUP BY T.account_type_desc

UNION ALL

SELECT 'Grand Total' AS category, COUNT(1) AS cnt
FROM account A

很高兴我能帮上忙!!