动态设置行组及行组级数
业务场景:
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
功能一、报表行组个数拟固定为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个时,预览结果为:
总结:
为了报表更加美观,可以根据参数分组依据所选个数为每个行组的字体、背景色等分别设置表达式。
此设计也存在一定的缺点,即如果层级太多时无法设置“+”“-”来展开折叠数据。如果各位小伙伴们有好的解决方案欢迎探讨。