繁体   English   中英

根据组页脚中的文本框值隐藏组(填充代码)-SSRS

[英]Hide groups based on textbox value in group footer (populated with code) - SSRS

我试图根据是否有任何正在运行的总计行具有负值来隐藏组。 我正在为生产制造计划报告,如果在选定的时间范围内特定零件不短缺,我想隐藏整个团队。 我不确定自己是否步入正轨,但这是我尝试过的方法(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

使用每个明细行上的代码来计算运行总计<0的行数。

=Code.AddTotal(SWITCH({FORMULA CALCULATING RUNNING TOTAL}<0,1,TRUE,0))

将总计添加到同一列中但在组页脚中:

=Code.GetTotal()

问题1-GetTotal代码似乎在每次打印时(直到报告中的这一点)都在汇总整个报告,而不是在组上重新启动。 我对SSRS中的代码了解不足,无法告诉它重新开始依靠新组。 希望能帮助您,前提是我可以成功地隐藏非短组。

问题2-如果我尝试基于该文本框或直接在Code.GetTotal()表达式中隐藏任何内容,即使报告不足,它也会隐藏所有内容(因此,我希望它可以显示所有内容,或显示所有内容第一次短缺后)。

编辑:

这是我的实际报告输出的简化屏幕截图(您看不到组标签,但已将其分组)。

报告截图

报告截图

日期和数量是查询字段。 余额是数量的运行值。 例外是SWITCH,其运行值计算与Balance相同-此处还将有其他例外选项,最终我想基于此字段进行隐藏/显示,但我想使其仅与“数量”一起使用首先要保持简单(因为我认为这是导致问题的运行值表达式)。 有一个称为“零件”的组。

余额的表达式是

=RunningValue(Fields!NetQty.Value,Sum,"Part")

如果所有“余额”值都大于零,则需要能够隐藏整个组。 如果任何值都小于零,那么我想查看整个组以及该组中的所有行,而不管单个行是低于零还是现在。

该查询是从我们的ERP进入临时表的,但它是有效的

SELECT Part, Date, Quantity from PartDetail WHERE Date <= ?UserParameter

还有其他一些字段,但是我认为它们在这里不相关(例如,如果是出库交易,我会翻转“数量”以获得基于另一个字段的NetQuantity)。

我可能误解了您的要求,但是您应该可以使用简单的表达式而无需任何代码即可完成此操作。

假设您有一个名为“ Group1”的组,并且明细行包含要检查负数的名为“ Quantity”的列值。

在屏幕底部的组面板中右键单击要隐藏的组,选择属性。 在属性面板中,单击“可见性”,然后将隐藏的属性设置为这样的表达式。 (假设您要隐藏该组,如果它不包含底片)。

=MIN(Fields!Quantity.Value, "Group1") >0 

请注意,您正在设置hidden属性,因此,如果此表达式返回True,则该组将被隐藏。 “ Group1”设置要在每个组中检查的表达式范围。 通过寻找最小值,如果最小值> 0,则该组中必须没有负数。

希望能有所帮助。

希望这次我能正确理解您!

这是一个包含表变量的示例,我认为该变量应该与从临时表获取的数据接近。

输出应仅允许您在SSRS中进行非常基本的过滤,也可以根据注释进行扩展,以仅将过滤后的数据发送到报告中。 如果您可能也想显示这些内容,则我将其保留。

首先,我们只创建一个与您的temp表的结构匹配的表,您显然在最终报告中将不需要此表,但是它很方便进行测试。

DECLARE @InputData TABLE (Part varchar(10), [Date] Date, Qty int)

INSERT INTO @InputData
VALUES 
('ABC', '2017-01-13', 10),
('ABC', '2017-01-14', 3),
('ABC', '2017-01-15', -4),
('ABC', '2017-01-16', -10),
('ABC', '2017-01-17', 5),
('ABC', '2017-01-18', 6),
('ABC', '2017-01-19', 6),
('DEF', '2017-01-13', 10),
('DEF', '2017-01-14', -5),
('DEF', '2017-01-15', -4),
('DEF', '2017-01-16', 3),
('DEF', '2017-01-17', 2),
('DEF', '2017-01-18', 1),
('DEF', '2017-01-19', -1),
('GHI', '2017-01-13', 12),
('GHI', '2017-01-14', -3),
('GHI', '2017-01-15', -4),
('GHI', '2017-01-16', 4),
('GHI', '2017-01-17', 3),
('GHI', '2017-01-18', 2),
('GHI', '2017-01-19', 1),
('JKL', '2017-01-13', 11),
('JKL', '2017-01-14', 4),
('JKL', '2017-01-15', -6),
('JKL', '2017-01-16', -12),
('JKL', '2017-01-17', 5),
('JKL', '2017-01-18', 6),
('JKL', '2017-01-19', 6)

现在,一个简单的查询将计算Part内的运行总计,然后检查这些运行总计是否低于零(再次在part内)

-- Return data including running total by Part 
-- Starting at the inner query we get the running total within Part
-- The outer query checks the min running total and sets a HideGroup column
SELECT 
    *
    , CASE WHEN MIN(RunTot) OVER(PARTITION BY Part) <0 THEN 1 ELSE 0 END AS HideGroup
    FROM 
    (-- running total within part
    select 
        *
        , SUM(Qty) OVER(PARTITION BY Part ORDER BY [Date]) AS RunTot
         from @InputData
    ) x

-- optionally we could wrap the whole thing in another select and 
-- we could filter out anything where hidegroup =1

最终输出如下所示。

Part    Date        Qty RunTot  HideGroup
ABC     2017-01-13  10  10      1
ABC     2017-01-14  3   13      1
ABC     2017-01-15  -4  9       1
ABC     2017-01-16  -10 -1      1
ABC     2017-01-17  5   4       1
ABC     2017-01-18  6   10      1
ABC     2017-01-19  6   16      1
DEF     2017-01-13  10  10      0
DEF     2017-01-14  -5  5       0
DEF     2017-01-15  -4  1       0
DEF     2017-01-16  3   4       0
DEF     2017-01-17  2   6       0
DEF     2017-01-18  1   7       0
DEF     2017-01-19  -1  6       0
GHI     2017-01-13  12  12      0
GHI     2017-01-14  -3  9       0
GHI     2017-01-15  -4  5       0
GHI     2017-01-16  4   9       0
GHI     2017-01-17  3   12      0
GHI     2017-01-18  2   14      0
GHI     2017-01-19  1   15      0
JKL     2017-01-13  11  11      1
JKL     2017-01-14  4   15      1
JKL     2017-01-15  -6  9       1
JKL     2017-01-16  -12 -3      1
JKL     2017-01-17  5   2       1
JKL     2017-01-18  6   8       1
JKL     2017-01-19  6   14      1

希望这可以帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM