【问题标题】:Reporting Services / Supporting robust filtering报告服务/支持强大的过滤
【发布时间】:2009-06-01 15:39:01
【问题描述】:

我正在寻找一种“最佳实践”方法来解决这种常见情况。我认为这个问题最好用一个例子来问。让我们假设以下内容:

  • 目标是编写一个“订单摘要”报告,该报告显示基于各种过滤标准的订单列表。
    • 示例:用户想要报告在 X 和 Y 日期之间创建的所有订单
    • 示例:用户想要报告所有状态为“open”的订单
    • 示例:用户想要报告其他用户 XYZ 生成的所有订单
    • 示例:用户想要报告 1000 美元到 10000 美元之间的所有订单
  • 这些报告可能会从不同的页面启动,但可能会有一个“高级搜索”页面允许他们检查/取消检查过滤器并定义参数

  • 我想使用远程处理来生成报告

使用通过报告参数和报告过滤器实现的所有这些过滤器创建单个报告变得非常麻烦且难以维护。这让我相信我应该创建一个存储过程,它接受所有可能的过滤器值(如果结果集不应该被参数过滤,则为 NULL)。

你同意这个评估吗?

如果是这样,我不是 TSQL 专家,我想对如何实现这个存储过程有一些一般性的建议。到目前为止,我是这样做的:

  1. 创建 orderID @resultset 的表变量
  2. 最初通过第一个过滤器填充@resultset(我选择了开始和停止日期)
  3. 对于每个过滤器:
    • 如果定义了过滤器,则创建一个表变量@tempresultset 并从@resultset WHERE 插入所有记录(过滤器适用)
    • 从@resultset 中删除,插入@resultset 从@tempresultset 中选择orderid
  4. 在应用所有过滤器后返回@resultset

这只是感觉不对/不高效...有没有更好的方法来解决这个问题?

对于如何解决此一般问题的任何其他建议或意见将不胜感激。对于似乎应该是一个非常普遍的问题,我对实施此解决方案的正确方法感到有些迷茫。

【问题讨论】:

    标签: sql stored-procedures reporting-services


    【解决方案1】:

    经过一些研究,我发现了一种在存储过程中的单个 select 语句中实现这些可选过滤器的好方法:

    它看起来像:

    SELECT ordernumber FROM orders
    --Filter #1 - based on Parameter #1
    WHERE (@param1 IS NULL) OR (somefield = @param1)
    --Filter #2 - based on Parameter #2
    AND WHERE (@param2 IS NULL) or (somefield2 = @param2)
    --Filter #3 - based on Parameter #3
    AND WHERE (@param3 IS NULL) or (somefield3 = @param3)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      相关资源
      最近更新 更多