在SSRS中,我有一个包含多个多值参数的报告。在其中一些我必须为子报告执行分组。问题是Tablix(提供我需要的分组)需要一个数据集 - 而参数不是数据集..
目前,我使用加入多值参数的数据集进行此分组,并将其传递给SQL函数。然后,SQL函数返回包含多值参数值的单列表。这需要SSRS来查询数据库,这是处理报告imho中已经存在的参数的一种丑陋方式。
是否有更简洁的方法来根据多值参数执行分组?
答案 0 :(得分:1)
你可以做到这一点的一种方式,虽然它是否适合讨论,可以建立一个Reporting Services Data Processing Extension - 它们并不难做,我建议的那个很简单......
为了让它适用于你有固定列表的任何东西,而我只是抛出一个想法,你可以创建一个看起来像这样的“查询语言”:
ParameterType=.net type&DataColumnName=Whatever the user wants&Value=first value&Value=second value...
这种方式在您拆分的扩展程序中& (你要定义一个规则来转义和输入值条目这样的&或东西),然后检查你只有一个ParameterType和DataColumnName条目(如果ParameterType不存在,默认为“System.String”,默认为“Value” “或者,如果DataColumnName不存在则抛出错误 - 如果它们是多重定义则抛出错误”,对于前者,如果设置,则使用Type.GetType设置列类型,然后在“schema”中设置名称结果集。
最后,您需要做的就是遍历所有Value条目并在结果集中添加一行。
这不仅可以用于多值参数,而且可以用于任何您想要变成数据集的固定列表,并且意味着不会访问数据库或任何东西 - 处理将在Rerporting Services服务器上进行
对于多值参数,您只需在报表中的查询中执行for循环即可生成查询。
也许,在寻求整洁的过程中,您还可以创建一个方便的函数,该函数将参数作为参数并生成查询,以便您拥有共享库和数据处理扩展,并且创建报表的所有人都需要要做的就是(我认为这将是一个五线程函数):
= MultiValueQuery.GenerateQuery(参数!MyMultiValueParameter)
整洁,也许,你是法官!