Crystal 报告 2016 交叉表根据有条件可用的指定列的值抑制行

Crystal Reports 2016 crosstab supress rows based on value of specified columns that are conditionally available

我有一个这样的交叉表

    Col1 Col2 Col3
Row1   1    0    1
Row2   0    1    1
Row3   1    0    0
Row4   0    0    1

这是为了在仓库和奥特莱斯之间移动库存。因此,如果 Col1 显示仓库的库存,而 Col2 和 Col3 是出口,则 Row2 和 Row4 的产品不可用,不应显示行。

但是,如果 Col1 和 Col2 是仓库,而 Col3 是出口,则只有 Row4 不可用,因此应该被抑制。

仓库的 ID 小于 X,出口的 ID 大于 X。我发现了这个 solution 并尝试使用代码应用它:

If {Stock}=0 and {VENUE_ID} < X Then
  {%DB_NULL}
Else
  {Stock}

但该代码仅适用于 VENUE_ID 小于 X 的 Stock。因此,只有当所有 Stock 值都等于 0 时,才会抑制行。 如果有办法让一行中的所有单元格都显示 0 值,那么它们就会被抑制。 这是正确的方法,我应该继续这条路并尝试修改代码,使一行中的其他单元格依赖于指定的单元格,还是我应该看看其他地方?

对于我想要实现的目标,是否有更好的解决方案?

我已经通过修改 SQL 服务器端的视图解决了我的问题。如果有人遇到同样的问题,请执行以下步骤:

  1. 向我从 CR 调用的 SQL 视图添加另一列。该列存储仓库库存的值。之前,仓库和商店的所有库存值都存储在一列中。

  2. 使用如下代码创建一个字段{@Warehouse_Stock}

    If {Warehouse_Stock}=0 Then
      {%DB_NULL}
    Else
      {Stock}
    
  3. {@Warehouse_Stock} 字段添加到交叉表的行组。

  4. 创建另一个字段{@Shop_stock}并添加代码:

    If {Stock}=0 Then
      {%DB_NULL}
    ELSE IF {@Warehouse_stock} = 0 THEN
      {%DB_NULL}
    Else
      {Stock}
    
  5. 添加 {@Shop_stock} 作为汇总字段到交叉表。

  6. 在交叉表专家中转到自定义样式选项卡,select @Warehouse_stoc 行并选中“隐藏空行”复选框。

这对我有用。希望这个解决方案也能帮助其他人。