在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可以接收多个值。但这似乎还不够。
我该如何改变?
答案 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或更高版本,这将有效。
我的示例非常简单,但您可以将数据应用于子报表,其中包含未与主报表共享的常规数据集(尤其是谓词)。