SSRS 动态设置分组依据及行组个数
动态设置行组及行组级数
业务场景:
A公司想在同一张BI报告中通过切换参数,分别从不同角度分析统计产品销售情况, 同时又想同时从两个角度或三个角度统计分析。
本场景主要涉及两个技能点:
1) 动态设置分组;
2) 分组个数可控。
准备工作:
1) SQL Server 及 示例数据库AdventureWorksDW2012
2) SSRS
3)数据准备:
USE [AdventureWorksDW2012]CREATE view [dbo].[InternetSalesTest]asselect 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] ajoin dbo.DimProduct p on a.ProductKey=p.ProductKeyjoin dbo.DimDate od on a.OrderDateKey=od.DateKeyjoin dbo.DimCustomer c on a.CustomerKey=c.CustomerKeyjoin dbo.DimGeography g on c.GeographyKey=g.GeographyKeyjoin dbo.DimPromotion po on a.PromotionKey=po.PromotionKeyjoin dbo.DimCurrency cu on a.CurrencyKey=cu.CurrencyKeyjoin dbo.DimSalesTerritory s on a.SalesTerritoryKey=s.SalesTerritoryKey--select * from InternetSalesTestGO
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
SSRS 动态设置分组依据及行组个数相关推荐
- SSRS动态设置文本框属性
SSRS可以通过表达式动态设置文本框所有的属性,比如字体,字号,是否加粗,如下图所示: 汉字和数字英文字母占用的空间不一样,一个汉字占用两个数字和英文字母的空间,VB里有LENB取得字节数,这SSRS ...
- Project的分组依据
Project中分组指的是将项目中的任务按照某种特定的分类进行分组,其目的是方便查看项目计划中的任务情况,通常在Project中它出现在视图选项的筛选器下方,默认是不分组,如下图. 当查看项目且需要对 ...
- ag-grid 列组和行组学习
首先,话不多说,直接上效果图. 以上涉及知识点: (1)列的伸缩:设置列的columnGroupShow属性即可. 在汇总那一列(总分 ...
- ag-grid 学习笔记三:ag-grid设置(定义列、选择行、复选框、设置行高列宽、置顶合计行、底部合计行、行组、客户端排序)
目录 一 定义列 二 选择行 三 设置复选框 四 设置行高列宽 五 置顶合计行 六 底部合计行 七 行组 八 客户端排序 一 定义列 表格的列有如下常用属性. 名称 说明 headerName 显示的 ...
- 如何在分组报表中实现组内数据补空行及组内页码
在对报表数据进行打印时,经常会要求进行精确打印,比如一张纸能打印 20 行数据,如果超过就分页,如果不满 20 行,则在数据下方进行补够空行.这种情况最常见于银行对账信息等明细数据的打印.同时,在某些 ...
- activiti 工作流 动态 设置 指定 节点任务人、责任人、组 的实现方式
首先给大家看一下我的流程图: 流程文件leaveBill.bpmn <?xml version="1.0" encoding="UTF-8"?> & ...
- C#:GridControl之 bandedGridView中的单元格自动换行、动态设置单元格行高
C#:GridControl之 bandedGridView中的单元格自动换行.动态设置单元格行高 1.自动换行 //自动换行//RepositoryItemMemoEdit:一个编辑器,允许显示和编 ...
- dev 报表设计器 怎么设置每页10行_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
葡萄城报表控件ActiveReports V14.0 全面支持 .NET Core平台.同时 ActiveReports的桌面报表设计器UI也全面增强,报表预览方式得以全面优化,报表设计能力得以大幅提 ...
- [Power Query] 分组依据
Power Query中的分组依据,类似于Excel中的分类汇总功能,可以按照某一分类对某列数据或某几列数据进行去重操作和聚合计算(求和.计数.求平均.非重复行计数等),并在去重的过程中将其他数据列按 ...
最新文章
- python cookbook pdf下载-Python Cookbook 第3版 中文版.pdf
- 关于产品推荐的10个问题
- Linux下快速搭建DNS服务器
- [推荐]VMware Workstation 6.5虚拟机(汉化补丁+注册机+原版安装文件)
- c语言写贪吃蛇什么水平_关于C语言写贪吃蛇
- 放大电路频率响应基础概念
- 如何在Cocos2D游戏中实现A*寻路算法(三)
- System.Web.Caching
- 在centos中如何用yum安装最新的yum源
- ABAP RFC函数导入参数 EXPORTING 传入内表形式参数
- 对话赫拉利与李飞飞:人工智能影响人类的四大问题
- ps4变更账号服务器,PSN ID怎么改?详细步骤教你如何更改PS4的PSN ID
- 快速列出字母+数字的全部组合
- 程序员脱发自救:用计算机视觉技术安全植发
- [文档] 软件需求规格说明书
- Oracle的常见错误及解决办法
- 深度学习入门笔记(二十):经典神经网络(LeNet-5、AlexNet和VGGNet)
- java.lang.Throwable: Substituted for the exception com.bea.xml.SchemaTypeLoaderException which lack
- servet的生命周期是怎样的?
- 大国数据跨境规则博弈,谁能抢占“数据经济制高地”?
热门文章
- 限制车间备料方式更改
- Python:使用threading模块实现多线程编程三[threading.Thread类的重要函数]
- android如何使用BroadcastReceiver后台实现来电通话记录的监听并存取到sqllite数据库通过Contentprovilder实现接口...
- 2012,字王强势回归
- SharePoint 2010 - User Profile Sync Service自动停止
- 莎拉波娃美网新赛服亮相
- C++并发编程 (1) 基本知识
- c++学习笔记(7) 面向对象思想
- linux释放内存后设备起不来,Linux-Memory小记
- c#窗体面板求和与平均值