Crystal Reports 中带过滤器的动态参数

Posted

技术标签:

【中文标题】Crystal Reports 中带过滤器的动态参数【英文标题】:Dynamic parameter in Crystal Reports with filter 【发布时间】:2017-01-19 12:21:41 【问题描述】:

Crystal Reports 中可以使用动态参数 - 参数选择列表不是固定的,而是在报表中输入的,而是从某个数据库表中获取的。例如在这里描述:

https://www.youtube.com/watch?v=kuHs89yyuEc

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

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

例如:我的报告代表一张发票。它按发票 ID 过滤为单个发票。参数允许选择发票的交货地点。但我不想从表中的所有交货地点中进行选择。相反,我希望该参数仅显示发票中客户的交货地点。

假设 customer_id 是报表中的公式字段,而交货地点是类似的表格

id    customer_id    street   city ...

是否可以按照我描述的方式过滤动态参数?

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

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')

我已经使用这个数据库做了一份报告。你可以在这里得到它: https://www.sendspace.com/file/907wq9

报告过滤到 CUSTOMER_ID=1

报告中的DELIVERY_PLACE 表通过外键链接到CUSTOMER 表:CUSTOMER_ID

我有一个动态参数,它从 DELIVERY_TABLE 获取地址

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

【问题讨论】:

如果表之间有正确的链接,那么您可以根据需要创建参数...在创建参数时使用静态而不是动态 有可能.. 可以创建动态参数 如果我误解了你的问题,请纠正我。它关于显示过滤值(即表格列中的位置)以供选择动态参数(即位置)。过滤后的值取决于发票 ID 和客户 ID 的值。因此,期望水晶报告在显示/刷新报告时应该知道发票 ID 的可用客户 ID。据我所知,在尚未指定客户 ID 时无法显示过滤值。 你没有回答我的评论? Siva:我相信我有一个正确的链接,它仍然显示所有值,所以你的回答对我没有帮助。 【参考方案1】:

我应该将此作为评论发布,但我没有积分等。

据我了解,您需要连接 CustomerID 上的表。这将自动将客户链接到其地址。其次,您不需要参数来选择正确的客户地址,您应该从 DELIVERY_PLACE 放置数据库字段地址,而不是。我没有您的数据库,因此如果两个表都已链接,我将缺乏知识。请右键单击databasefileds节点并显示sql查询..然后发布以更好地理解。 您还可以将 RecordSelection 公式更改为 CUSTOMER.ID_CUSTOMER=1 和 DELIVERY_PLACE.ID_CUSTOMER = 1

这将根据表格中的条目显示每个客户的两个地址。如果您想在运行时从地址表中选择单个地址。你需要把它放在记录选择公式中说.. DELIVERY_PLACE.ID_DELIVERY = ?DeliveryPlace 而且最好给参数ID_DELIVERY而不是完整的地址。

【讨论】:

以上是关于Crystal Reports 中带过滤器的动态参数的主要内容,如果未能解决你的问题,请参考以下文章

会用水晶报表crystal reports的请进

更改 Crystal Reports 查看器连接字符串 ASP.NET

.net里的crystal reports(水晶报表)可以做出趋势图吗?

Crystal Reports 9.0 如何制作Code-128 的条码,扫描枪要能够扫描,使用的时Code128字体!急~~~~

使用Crystal Reports ReportDocument

Crystal Reports - “您要求的报告需要更多信息”