如何计算值大于0的数据透视表行

时间:2013-12-27 17:49:17

标签: c# .net vb.net excel excel-interop

我有一个SQL视图,它返回包含几个“value”列的行。为简单起见,我们称之为AmountAAmountBAmountC

我在Excel中使用数据透视表来为该数据创建报告。数据透视表的源范围通常使用.Net反射生成,然后使用Excel Interop推送到Excel。数据透视表也是使用Excel Interop动态生成/配置的。

我需要计算并显示一个字段,该字段将计算AmountA大于0的行数。我还需要对AmountBAmountC执行相同操作。结果应按以下顺序显示在相同行级别的数据透视表中:AmountA - CountA - AmountB - CountB - AmountC - CountC。为了更好地理解我要完成的任务,请考虑按count汇总的数据透视表字段,但行为类似于COUNTIF函数。例如,如果组 ProductX 有10行,只有8行AmountA大于0,则它应显示CountA为8。

我已经尝试添加公式为=IF(AmountA>0,1,0)的计算字段,然后对此字段求和,但似乎公式应用于分组值,而不是每个实际AmountA行。例如,如果组 ProductX Sum of AmountA大于0,即使实际的行数,它也会显示1(Sum of AmountA> 0)的计数AmountA大于0的是8。

我还考虑在源范围中添加使用类似于=IF(AmountA>0,1,0)的公式的新列,然后在数据透视表中包含它们。但是,我想避免这种情况,因为我通常会生成源范围并进行调整,这需要大量的重构。

我考虑过在视图中添加其他列来表示计数,但我认为视图不应该负责呈现数据;这将是报告的工作。另外,我无法看到CountA列如何与每一行相关,因为它具有或不具有大于0的AmountA

那么,是否可以在数据透视表字段上重现COUNTIF行为,或者我应该考虑在其他地方处理计数?

2 个答案:

答案 0 :(得分:1)

考虑以下数据示例:

AmountA AmountB AmountC
2       1       2
0       0       0
3       5       1
4       0       2
5       0       0
0       6       2
2       0       0

您可以使用数据透视表工具“组”来聚合等于1和更高的值(即将它们与等于零的值分开)。

设置:

  1. “从”= 1开始,
  2. “结束于”=某个大数字(在下面的示例中放置100),
  3. “By”=与上一步相同的大数字。
  4. 唯一的问题是您需要为每个变量(A,B和C)创建一个数据透视表。

    请参阅下面的屏幕截图,以便更好地理解:

    enter image description here

    如果你隐藏D,E,H和I列,你似乎有了所需的输出。

答案 1 :(得分:0)

我最终决定将新列修改为定义类似于=IF(AmountA>0,1,0)的公式的源范围,然后在数据透视表中使用带有计数摘要的列。