Crystal reports 带过滤器的Crystal报表中的动态参数

Crystal reports 带过滤器的Crystal报表中的动态参数,crystal-reports,Crystal Reports,Crystal报表中有可能使用动态参数—参数的选择列表不是固定的,也不是在报表中键入的,而是从一些数据库表中获取的。这里举例说明: 我的问题是,以这种方式创建的参数允许从表中的所有值中进行选择 我想根据报告中的数据对其进行过滤 例如:我的报告表示发票。根据发票id将其筛选为单个发票。参数允许选择发票的交货地点。但我不想从表中的所有交货地点中进行选择。相反,我希望参数仅显示发票中客户的交货地点 假设customer_id是报表中的一个公式字段,交货地点是一个类似于 id customer_

Crystal报表中有可能使用动态参数—参数的选择列表不是固定的,也不是在报表中键入的,而是从一些数据库表中获取的。这里举例说明:

我的问题是,以这种方式创建的参数允许从表中的所有值中进行选择

我想根据报告中的数据对其进行过滤

例如:我的报告表示发票。根据发票id将其筛选为单个发票。参数允许选择发票的交货地点。但我不想从表中的所有交货地点中进行选择。相反,我希望参数仅显示发票中客户的交货地点

假设customer_id是报表中的一个公式字段,交货地点是一个类似于

id    customer_id    street   city ...
是否可以按照我描述的方式过滤动态参数

编辑: 也许一个简单的例子会有所帮助。 我创建了一个包含两个表的测试数据库(我使用的是Sql Server):

我用这个数据库做了一份报告。你可以在这里找到它:

报告将筛选为CUSTOMER_ID=1

DELIVERY\u PLACE表通过外键在报告中链接到CUSTOMER表:CUSTOMER\u ID

我有一个动态参数,它从DELIVERY_表中获取地址

但它显示所有地址,而我希望它只显示过滤到当前客户的地址


我本应将此作为评论发布,但我没有要点等

据我所知,您需要连接CustomerID上的表。这将自动将客户链接到其地址。其次,您不需要参数来选择正确的客户地址,而是应该将数据库字段地址放在交货地点。我没有你的数据库,所以我缺乏知识,如果这两个表已经链接。请右键单击databasefileds节点并显示sql查询。。然后贴出来以便更好地理解。 您还可以将记录选择公式更改为{CUSTOMER.ID\u CUSTOMER}=1和{DELIVERY\u PLACE.ID\u CUSTOMER}=1

这将根据表中的条目显示每个客户的两个地址。如果要在运行时从addresses表中选择单个地址。你需要把它放在记录选择公式中,比如。。 {DELIVERY\u PLACE.ID\u DELIVERY}={?DeliveryPlace}
此外,最好将ID_传递给参数,而不是完整的地址。

如果表之间有正确的链接,则可以根据需要创建参数。。。创建参数时,可以使用静态而不是动态。。如果我误解了你的问题,可以创建一个动态参数来纠正我。它是关于显示过滤值(即表格列中的位置)以选择动态参数(即位置)。过滤后的值取决于发票id和客户id的值。因此,crystal report在显示/刷新报告时应该知道发票id的可用客户id。据我所知,在尚未指定客户id的情况下,不可能显示过滤后的值。您没有回答我的评论?Siva:我相信我有一个正确的链接,它仍然显示所有值,因此您的回答对我没有帮助。
CREATE DATABASE TEST 
USE TEST

CREATE TABLE [dbo].[DELIVERY_PLACE](
    [ID_DELIVERY] [int] NULL,
    [ID_CUSTOMER] [int] NULL,
    [ADDRESS] [varchar](50) NULL
) ON [PRIMARY]

INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (1, 1, N'Address A1')
INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (2, 1, N'Address A2')
INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (3, 2, N'Address B1')
INSERT [dbo].[DELIVERY_PLACE] ([ID_DELIVERY], [ID_CUSTOMER], [ADDRESS]) VALUES (4, 2, N'Address B2')

CREATE TABLE [dbo].[CUSTOMER](
    [ID_CUSTOMER] [int] NULL,
    [NAME] [varchar](20) NULL
) ON [PRIMARY]

INSERT [dbo].[CUSTOMER] ([ID_CUSTOMER], [NAME]) VALUES (1, N'Customer A')
INSERT [dbo].[CUSTOMER] ([ID_CUSTOMER], [NAME]) VALUES (2, N'Customer B')