zoukankan      html  css  js  c++  java
  • 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个时,预览结果为:

    总结:

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

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

  • 相关阅读:
    CentOS 7.3 系统安装配置图解教程
    图床神器:七牛云 + Mpic + FScapture
    Markdown 使用教程
    Python小游戏、小程序
    深入理解Python中的yield和send
    替代crontab,任务计划统一集中管理系统cronsun简介
    变量命名神器Codelf
    Spring Aspect实现AOP切面
    SpringCloud之注册中心Eureka搭建
    SpringCloud中eureka配置心跳和剔除下线的服务的时间
  • 原文地址:https://www.cnblogs.com/stayting/p/7374276.html
Copyright © 2011-2022 走看看