用户参数的SSRS矩阵和动态分组

时间:2018-06-20 14:27:00

标签: dynamic reporting-services grouping

我正在使用SQL Server 2014 Reporting Services通过以下方式显示具有动态数据的矩阵:

  1. 报告数据位于数据库视图中,其中一条记录具有> 20个id / name属性(例如CityID,CityName,CountryID,CountryName,SalesmanID,SalesmanName,ProductID,ProductName,Index1ID,Index1Name,Index2ID,Index2Name ... )和2个十进制值(Value1,Value2)
  2. SSRS报告中只有一个矩阵(tablix)
  3. 用户指定要在tablix列“域”中放置哪些数据,并在“域”行中放置哪些数据(例如,用户选择参数列:产品,行选择城市:
  4. Tablix值显示Value1和Value2的汇总

此动态功能通过使用组定义中的表达式来工作。在“分组依据”字段中,我使用了这样的表达式:

=Switch(
Parameters!XAxisDimensionParameter.Value=1, Fields!CityId.Value,
Parameters!XAxisDimensionParameter.Value=2, Fields!CodeId.Value,
Parameters!XAxisDimensionParameter.Value=3, Fields!NameId.Value,
Parameters!XAxisDimensionParameter.Value=4, ...,
..., ...,
)

我现在想做的是向行添加分组功能。 用户将输入“分组依据”参数中的“国家/地区,城市”,而Tablix将按CountryID,RegionID和CityID对商品数据进行分组。请注意以下细节:用户可以指定任意数量的分组。没有分组也是有效的选项。

我可以在设计时静态地执行此操作,但这不是用户要求的解决方案。

似乎无法在运行时动态添加分组。

是真的吗?

1 个答案:

答案 0 :(得分:0)

我会在您的SQL中进行动态分组。您可以将CASE表达式与参数一起使用。然后,您可以在报告中按[dynamic_group]列进行分组。

SQL示例

;WITH
example_data
AS
(
    SELECT tbl.* FROM (VALUES
      ( 'City1', 'Code1', 'Name1')
    , ( 'City2', 'Code2', 'Name2')
    , ( 'City3', 'Code3', 'Name3')
    , ( 'City4', 'Code4', 'Name4')
    , ( 'City5', 'Code5', 'Name5')
    , ( 'City6', 'Code6', 'Name6')
    ) tbl ([CityId], [CodeId], [NameId]) 
)
SELECT 
    [dynamic_group] = 
        CASE 
            WHEN @XAxisDimensionParameter IN(1) THEN [CityId]
            WHEN @XAxisDimensionParameter IN(2) THEN [CodeId]
            WHEN @XAxisDimensionParameter IN(3) THEN [NameId]
            WHEN @XAxisDimensionParameter IN(1,2,3) THEN [CityId] + ':' + [CodeId] + ':' +  [NameId]
            ELSE NULL
        END 
FROM 
    example_data

查询结果

query results