Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamic SSRS矩阵与用户参数动态分组_Dynamic_Reporting Services_Grouping - Fatal编程技术网

Dynamic SSRS矩阵与用户参数动态分组

Dynamic SSRS矩阵与用户参数动态分组,dynamic,reporting-services,grouping,Dynamic,Reporting Services,Grouping,我使用SQL Server 2014 Reporting Services以以下方式显示包含动态数据的矩阵: 报表的数据位于数据库视图中,其中一条记录具有>20个id/名称属性(例如CityID、CityName、CountryID、CountryName、SalesmanID、SalesmanName、ProductID、ProductName、Index1ID、Index1Name、Index2ID、Index2Name…)和2个十进制值(值1、值2) SSRS报告只有一个矩阵(tablix

我使用SQL Server 2014 Reporting Services以以下方式显示包含动态数据的矩阵:

  • 报表的数据位于数据库视图中,其中一条记录具有>20个id/名称属性(例如CityID、CityName、CountryID、CountryName、SalesmanID、SalesmanName、ProductID、ProductName、Index1ID、Index1Name、Index2ID、Index2Name…)和2个十进制值(值1、值2)
  • SSRS报告只有一个矩阵(tablix)
  • 用户指定要在tablix列“域”中放置的数据以及要在行“域”中放置的数据(例如,用户选择参数列:产品,行:城市)
  • 表9显示了聚合值1和值2
  • 此动态功能通过使用组定义中的表达式工作。在“分组”字段中,我使用了如下表达式:

    =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对产品数据进行分组。请注意,用户可以指定任意数量的分组。“无分组”也是一个有效选项

    我可以在设计时静态地这样做,但这不是满足用户需求的解决方案

    看起来不可能在运行时动态添加分组


    真的吗?

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

    SQL示例 查询结果

    我看不出这个解决方案有多合适。你能再解释一下吗?注意多级分组矩阵,有N组。你能发布参数的数据集吗!XAxisDimensionParameter.Value?如果您发布示例数据集,我可能能够提供一个递归CTE,该CTE无需使用CASE表达式即可生成结果。您是否仍然存在动态分组问题?
    ;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