SSRS 动态设置分组依据及行组个数

动态设置行组及行组级数

业务场景:

A公司想在同一张BI报告中通过切换参数,分别从不同角度分析统计产品销售情况, 同时又想同时从两个角度或三个角度统计分析。

本场景主要涉及两个技能点:

1)  动态设置分组;

2)  分组个数可控。

准备工作:

1)  SQL Server 及 示例数据库AdventureWorksDW2012

2)  SSRS

3)数据准备:

USE [AdventureWorksDW2012]

CREATE view [dbo].[InternetSalesTest]

as

 

select p.EnglishProductName

      ,a.OrderDateKey

      ,od.FiscalYear

      ,od.FiscalSemester

      ,'Q'+convert(nvarchar,od.FiscalQuarter) as FiscalQuarter

      ,od.EnglishMonthName

      ,od.MonthNumberOfYear

      ,od.EnglishDayNameOfWeek

      ,a.DueDateKey

      ,a.ShipDateKey

      ,c.FirstName

      ,c.Gender

      ,g.EnglishCountryRegionName

      ,g.City

      ,po.EnglishPromotionType

      ,cu.CurrencyName

      ,s.SalesTerritoryGroup

      ,s.SalesTerritoryCountry

      ,s.SalesTerritoryRegion

      ,a.OrderQuantity

      ,a.UnitPrice

      ,a.ExtendedAmount

      ,a.UnitPriceDiscountPct

      ,a.DiscountAmount

      ,a.ProductStandardCost

      ,a.TotalProductCost

      ,a.SalesAmount

      ,a.TaxAmt

      ,a.Freight

--select *

 from [dbo].[FactInternetSales] a

 join dbo.DimProduct p on a.ProductKey=p.ProductKey

 join dbo.DimDate od on a.OrderDateKey=od.DateKey

 join dbo.DimCustomer c on a.CustomerKey=c.CustomerKey

 join dbo.DimGeography g on c.GeographyKey=g.GeographyKey

 join dbo.DimPromotion po on a.PromotionKey=po.PromotionKey

 join dbo.DimCurrency cu on a.CurrencyKey=cu.CurrencyKey

 join dbo.DimSalesTerritory s on a.SalesTerritoryKey=s.SalesTerritoryKey

 

 

 --select * from InternetSalesTest

GO
View Code

功能一、报表行组个数拟固定为2个,动态分组依据

新建或打开一个报表解决方案,添加一个空白报表[动态分组],新建数据源,创建参数[FY](仅供筛选数据):

 

创建参数[分组依据],本报表以4个可用值为例,可用值的【值】使用从1开始的整数:

 

新建数据集,:

插入表格,初步设置如下:

点击行组(详细信息)后的三角→添加组→父组: 

分组依据的表达式设置如下:

在行组Group1下添加子组Group2:

Group2的分组依据表达式为:

 

在本例中我们只想看到分组统计的数值,故删除行组的【详细信息】

 

Group1、Group2分别添加总计→早于,并设置前两列的标题如下:

报表至此功能一设置完毕,预览效果展示如下,

 当分组依据选择多余2个时,此报表仅对选择的前两个为分组依据,多余的直接忽略。当分组依据只选择1个时,此时报表出错Group2的Group表达式包含错误,索引超出了数组界限:

  

功能二、行组个数根据参数分组依据所选值个数确定,如参数分组依据只选择一个时行组只显示1组,参数选择三个时行组显示3

解决方案参考:

继功能一中步骤,行组Group2的分组表达式改用如下方式:

并设置行组Group2的可见性为[基于表达式显示或隐藏],表达式如下:

 

 预览查看结果,此时参数分组依据我们只选择一个“Product”,结果如下:

 切换到报表设计模式,在行组Group2下添加子组Group3,行组Group3的分组表达式为:

 

行组Group3的可见性为[基于表达式显示或隐藏],表达式如下:

 

 在行组Group3下添加子组Group4,行组Group4的分组表达式为:

 

行组Group4的可见性为[基于表达式显示或隐藏],表达式如下:

 

并为每个行组添加总计,最终设计样式如下:

  

预览查看结果,参数分组依据我们选择4个,预览结果为:

分组依据选择3个时,预览结果为:

总结:

    为了报表更加美观,可以根据参数分组依据所选个数为每个行组的字体、背景色等分别设置表达式。

   此设计也存在一定的缺点,即如果层级太多时无法设置“+”“-”来展开折叠数据。如果各位小伙伴们有好的解决方案欢迎探讨。

原文地址:https://www.cnblogs.com/stayting/p/7374276.html