我正在使用SQL Server 2014 Reporting Services通过以下方式显示具有动态数据的矩阵:
此动态功能通过使用组定义中的表达式来工作。在“分组依据”字段中,我使用了这样的表达式:
=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对商品数据进行分组。请注意以下细节:用户可以指定任意数量的分组。没有分组也是有效的选项。
我可以在设计时静态地执行此操作,但这不是用户要求的解决方案。
似乎无法在运行时动态添加分组。
是真的吗?
答案 0 :(得分:0)
我会在您的SQL中进行动态分组。您可以将CASE
表达式与参数一起使用。然后,您可以在报告中按[dynamic_group]
列进行分组。
;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