【发布时间】:2017-05-01 01:59:18
【问题描述】:
我正在尝试根据任何运行总行是否具有负值来隐藏组。我正在为制造建立一个计划报告,如果在选定的时间范围内没有特定零件的短缺,我想隐藏整个组。我不确定我是否走在正确的轨道上,但这是我尝试过的(SQL 2014):
加码得到总数:
Dim public totalBalance as Integer
Public Function AddTotal(ByVal balance AS Integer ) AS Integer
totalBalance = totalBalance + balance
return balance
End Function
Public Function GetTotal()
return totalBalance
End Function
使用每个明细行上的代码来统计运行总计
=Code.AddTotal(SWITCH({FORMULA CALCULATING RUNNING TOTAL}<0,1,TRUE,0))
将总计添加到同一列但在组页脚中:
=Code.GetTotal()
问题 1 - GetTotal 代码似乎在每次打印时聚合整个报告(直到报告中的那个点),而不是在组上重新启动。我对 SSRS 中的代码知之甚少,无法告诉它重新开始指望一个新组。假设我可以成功隐藏非短组,我们将不胜感激。
问题 2 - 如果我尝试基于该文本框或直接在 Code.GetTotal() 表达式上隐藏任何内容,它会隐藏所有内容,即使报告中存在短缺(所以我希望它要么显示所有内容,或在第一次短缺后显示所有内容)。
编辑:
这是我实际报告输出的简化屏幕截图(您看不到组标签,但它已分组)。
报告截图
日期和数量是查询字段。余额是数量上的一个运行值。 Exception 是与 Balance 相同的运行值计算的 SWITCH - 这里还会有一些其他异常选项,最终我想根据这个字段隐藏/显示,但我想让它只使用 Quantity首先要保持简单(因为我认为是 runningvalue 表达式导致了我的问题)。有一个名为“Part”的组。
平衡的表达式是
=RunningValue(Fields!NetQty.Value,Sum,"Part")
如果所有余额值都高于零,我需要能够隐藏整个组。如果任何值低于零,那么我想查看整个组和该组中的所有行,无论单个行是低于零还是现在。
查询是从我们的 ERP 传到一个临时表中的,但它是有效的
SELECT Part, Date, Quantity from PartDetail WHERE Date <= ?UserParameter
还有一些其他字段,但我认为它们在这里不相关(例如,如果是出站交易,我会翻转 Quantity 上的符号以基于另一个字段获取 NetQuantity)。
【问题讨论】:
-
好的,我现在明白这个问题了。现在还有一件事......你的组基于什么,Part?我的直觉是在 SQL 中完成所有这些操作,但解决方案会因您运行的 SQL Server 版本而异。附言我在英国,所以可能需要一些时间才能回复您。
-
组基于 PartNumber。 SQL 有点不同——我在 ERP 的查询向导中构建了查询,然后将数据集转储到临时表中。然后 SSRS 对该数据集进行查询。限制是原始查询需要是单个级别(没有子查询),因为将初始查询结果推送到临时表的功能存在问题(我相信这是一个错误,因为我被告知它会是已在更高版本的 ERP 软件中修复)。
-
哦,我需要使用向导才能从软件内部启动报告。不过,我可以将其他数据集直接添加到报告中,只要我有至少一组来自 ERP 的数据集,所以我想我可以在必要时通过向导简单地传递一些参数。