0

我正在使用 Crystal Reports XI 构建一个报表,该报表调用一个需要参数 @Type_ID 和 @Subtype_ID 的 SQL Server 存储过程。

数据库中还有一个表,它以一对多的关系关联类型和子类型。

我想让报告的参数提示屏幕要求:

  • 类型 - 列出的类型之一或 Null。如果为 Null,则屏幕不会询问子类型。

  • 子类型 - 与所选类型或 Null 关联的列出的子类型之一。

...并将这两个值分别作为@Type_ID 和@Subtype_ID 传递给存储过程。(如果存储过程得到@Type_ID = Null,它将返回所有类型的记录。如果它得到@Type_ID <> Null 并且@Subtype_ID = Null,它将返回与所选类型关联的所有子类型的记录。)

有没有办法让我的水晶报表做这一切?

到目前为止,使用来自这个答案的建议,我在@Subtype_ID 上设置了一个动态级联参数 (DCP),它以我上面描述的方式请求一个类型,然后是一个子类型,然后将选定的子类型传递给 @Subtype_ID。但是,我还没有弄清楚如何将通过这个 DCP 选择的 Type 传递给 @Type_ID,这样如果 Subtype 为 Null,则存储过程可以返回所有具有所选 Type 的记录。

4

1 回答 1

2

问题是您的过程定义创建了两个参数:TYPE_IDSUBTYPE_ID. Crystal Reports 的参数(动态或静态)并非旨在相互交互。

在我看来,您有三个选择:

  • 创建一个包含您想要的单个提示组的报表(确保提示组创建两个参数)(主报表不需要数据源,顺便说一句);插入一个使用您的过程的子报表(它将创建两个参数);将主报告中的参数链接到子报告中的参数;如有必要,您可以在主报表中创建公式(然后将其链接到子报表中的两个参数)以获得额外的逻辑(例如,将“All Type Id”的参数值转换为 NULL)。

  • 重构您的过程,使其具有一个VARCHAR参数,该参数将接收连接的TYPE_IDand SUBTYPE_ID。创建一个动态参数,该参数将具有键和描述的连接值(例如 1/3;类型 [1] - 子类型 [3])。您的过程逻辑将需要解析参数的值以确定 和 的TYPE_IDSUBTYPE_ID。您需要创建一个生成键和描述的查询,它们将通过 BusinessView 的各个层公开。

  • 放弃该过程以支持命令或“正常”查询。以我的经验,绝大多数报告都可以在没有存储过程的情况下构建。结合单个提示组,这将为您提供所需的灵活性。

于 2012-05-22T11:47:31.733 回答