Report Builder 3.0订单取消次数筛选参数创建求助
嘿,刚接触SSRS的话,这个按取消订单次数筛选的需求其实不难,我给你拆解成一步步的操作,跟着来就行:
步骤1:先做一个统计取消次数的数据集
首先得先算出每个ID总共取消了多少次订单,这是后续参数和筛选的基础。你可以新建一个数据集,用下面的SQL查询:
SELECT ID, SUM(Cancelled) AS TotalCancelledOrders FROM 你的客户订单视图名称 -- 把这里换成你实际的视图名 GROUP BY ID
因为Cancelled字段是1代表取消、0代表没取消,用SUM直接就能算出每个ID的总取消次数,很方便。
步骤2:创建“取消订单次数”筛选参数
接下来在Report Builder里加参数,让用户能选具体的次数:
- 打开左侧的报表数据面板,右键点「参数」→「添加参数」
- 参数名称设个好记的,比如
TotalCancelledFilter,提示文本写「选择取消订单次数:」 - 数据类型选整数,毕竟次数是数字嘛
- 如果你想让用户选多个次数,就勾选「允许多个值」;要是只想选单个,就不用勾。也可以选「允许空值」,方便用户看所有数据
- 切到「可用值」选项卡,选「从查询获取值」:
- 数据集选你刚才新建的那个统计取消次数的数据集
- 值字段和标签字段都选
TotalCancelledOrders,这样用户看到的下拉选项就是1、2、3这些数字
- 要是需要默认值,就去「默认值」选项卡设置,比如默认选1,或者留空也行
步骤3:修改主报表数据集,加上筛选逻辑
现在要让主报表的数据跟着用户选的参数走,得修改主数据集的查询:
如果是单个值参数,用这个查询就行:
SELECT ID, OrderID, Department, Date, delivered, Cancelled FROM 你的客户订单视图名称 WHERE ID IN ( SELECT ID FROM ( SELECT ID, SUM(Cancelled) AS TotalCancelled FROM 你的客户订单视图名称 GROUP BY ID ) AS SubQuery WHERE TotalCancelled = @TotalCancelledFilter )
要是你开了「允许多个值」,把上面的=改成IN就行:
WHERE TotalCancelled IN (@TotalCancelledFilter)
或者用JOIN的写法,可能更清晰:
SELECT v.ID, v.OrderID, v.Department, v.Date, v.delivered, v.Cancelled FROM 你的客户订单视图名称 v INNER JOIN ( SELECT ID, SUM(Cancelled) AS TotalCancelled FROM 你的客户订单视图名称 GROUP BY ID HAVING SUM(Cancelled) = @TotalCancelledFilter -- 多值的话改成IN ) AS CancelCounts ON v.ID = CancelCounts.ID
步骤4:测试验证
点一下Report Builder顶部的「运行」按钮,参数面板会弹出你做的下拉框,选个次数比如4,看看报表表格是不是只显示那些取消了4次订单的ID对应的记录。如果有问题,检查下数据集的视图名有没有写错,参数和查询里的参数名是不是一致。
小技巧
- 如果你的数据量很大,把统计取消次数的逻辑做成存储过程,运行起来会更快
- 想加个「所有」选项的话,给统计数据集的查询加一行:
UNION SELECT 0 AS TotalCancelledOrders, '所有' AS TotalCancelledOrders,然后在主查询里判断如果参数是0就不筛选(比如WHERE (@TotalCancelledFilter = 0 OR TotalCancelled = @TotalCancelledFilter))
内容的提问来源于stack exchange,提问作者pete
相关产品推荐
相关产品推荐

