我有一个主要报告,客户在其中输入完整的序列号或序列号的最后5个字符。该报告返回有关该产品的几条信息,并运行一个子报告以收集其他信息。
主报表数据集查询是这样的...
select SerialNumber, ID, Property1
from Products
where (SerialNumber = @prmSerialNumber) OR (SerialNumber LKE '%' + @prmSerialNumber)
当我输入完整的序列号“ 123456789”时,将返回以下结果集:
SerialNumber ------------ ID ------------- Property1
123456789 ----------- e45f6789 ---------绿色
当我输入最后5个字符“ 56789”时,将返回完全相同的结果集。因此,我知道主要数据集将返回适当的结果,并且仅返回一行。
子报表数据集查询就是这样...
select ID, Property2, Property3
from PropertyTable1
where ID = @prmID
当我将子报表插入主报表中时,在“子报表属性”的“参数”选项卡上,我已将子报表参数@prmID链接到主报表数据集ID列(prmID = [ID])
运行主报表时,如果输入完整的序列号“ 123456789”,则子报表将返回适当的数据。当我使用序列号的后5个字符运行主报表时,子报表根本不会显示。
我尝试自行运行子报表,使参数可见,并从主报表的结果集中输入ID,并且运行良好。
我尝试将序列号包含在子报表数据集中,并将其用作这样的参数...
更新的子报表查询
select p1.ID, p1.Property2, p1.Property3, p2.SerialNumber
from PropertyTable1 AS p INNER JOIN
Products AS p2 ON p1.ID = p1.ID
where (p2.SerialNumber = @prmSerialNumber) OR (p2.SerialNumber LKE '%' + @prmSerialNumber)
当我如上所述更改子报表查询,然后自己运行子报表时,我可以使用完整的序列号或仅使用最后5个字符作为参数值,并且报告会以任何一种方式返回适当的数据。但是,当我将其添加到主报表中并更新传递的参数为@prmSerialNumber = [SerialNumber](来自主数据集的序列号)时,只要输入完整的序列号,它就可以工作。只要输入最后5个字符,子报告就不会显示。
我还尝试过更新传递给@prmSerialNumber = [@prmSerialNumber](用户在主报表中输入的参数)的参数。结果相同。输入完整的序列号后,它可以正常工作。输入最后5个字符后,即使我自己运行子报表也可以正常工作,但子报表不会显示。
无法弄清楚为什么我自己运行子报表并手动输入参数值后,子报表仍能正常运行,但是一旦将其链接到主报表,则只有在使用完整序列号的情况下,该子报表才有效作为主要报告参数值。