在SSRS中对字符串进行分组后如何将字符串列表作为参数传递?

时间:2013-07-25 20:30:26

标签: arrays reporting-services parameters grouping

在SSRS中,我制作了一个数据集,根据他们的关系,返回(大致)有关某个人的信息和有关公司的信息:

#####################################################################
# Name     # Roles # LinkedTo # Birthdate  # Adress # CompanyAdress #
#####################################################################
# Joe      # VP    # Corp A   # 1945-01-01 # 123    # 456           #
# Joe      # CEO   # Corp A   # 1945-01-01 # 123    # 456           #
# Joe      # VP    # Corp B   # 1945-01-01 # 123    # 543           #
# Bill     # CEO   # Corp B   # 1950-12-31 # 234    # 543           #
#####################################################################

我的报告包含2个部分。第一个显示人的信息,第二个显示他们的链接。

######################################
# Joe    # 1945-01-01   # Roles(???) # <-- This is a subreport
######################################
# Linked to : Corp A (VP)            # 
# Linked to : Corp A (CEO)           # 
# Linked to : Corp B (VP)            #
######################################

######################################
# Bill    # 1950-12-31   # ???       # <-- same subreport
######################################
# Linked to : Corp B (CEO)           #
######################################

子报表位于一个组中,在数据集的“名称”列上进行过滤。

我想列出我所有人的所有角色(Joe的副总裁,首席执行官和VP,Bill的CEO)。

分组似乎导致我的子报告只接收第一个值(Joe:VP,Bill:VP)而不是数组。

我表示我的参数@Roles可以接收多个值。但这似乎还不够。

我该如何改变?

1 个答案:

答案 0 :(得分:1)

如果获取数组中的第一个索引项,则参数的问题可能是AVAILABLE或默认值未正确设置。 EG:如果我设置一个参数来和我一起去,那就像:

declare @Temp table ( id int, Name varchar(8) )

insert into @Temp values (1, 'A'), (1, 'B'), (2, 'C');

Select 
  Id
, Name
from @Temp

如果我有一个具有子报告和其他东西的分组,它可能只设置一个值,即使它允许多个。如果您希望您的参数与范围无关(意味着它不关心报告中确定值的位置)。您可以将其可用值和默认值设置为“从查询中获取值”,并设置满足的数据集,只返回相同的静态值,它将只获得这些值。

您对一个完整不同的RDL文件中的报告(看起来像你有)这样做,并将其设置为只有名称的参数而忘记其他任何内容。然后,您将其与名称仅作为其变量的另一个报告相关联。我会测试你可以输入一个不同的名称,它每次都会提供相同的数据。通常,当报表嵌套并且存在多个参数或共享集时,则存在问题。永远不要有两个父子关系共享数据集恕我直言的报告,因为您可能会遇到分组更改级别的问题。

理论上如果你可以输入1并且你的子报告给出了两行“A”和“B”,如果你设置一个假装参数@Id绑定到一个报告并添加了一行:'其中Id = @ID' 。为了测试我的报告,我应该输入1或2,它应该给出两个不同的值。如果是的话,我知道这个报告是按照设计工作的,并且调用它是错误的。如果没有,那么子报告首先是问题。如果报告未显示与您使用同一个人测试的相同大小和数据,则说明方向和大小调整存在问题,或者分组仅导致报告的一部分显示。我已经报告了子报表的崩溃,然后在显示报表后使宽度增大,因此我知道如果您使用SSRS 2008R2或更高版本,这将有效。

我的示例非常简单,但您可以将数据应用于子报表,其中包含未与主报表共享的常规数据集(尤其是谓词)。