C# 如何计算值大于0的透视表的行数
我有一个SQL视图,它返回包含两个“value”列的行。为了简单起见,我们将它们称为C# 如何计算值大于0的透视表的行数,c#,.net,vb.net,excel,excel-interop,C#,.net,Vb.net,Excel,Excel Interop,我有一个SQL视图,它返回包含两个“value”列的行。为了简单起见,我们将它们称为AmountA,AmountB和AmountC 我正在使用Excel中的透视表为这些数据创建一个报告。透视表的源范围通常使用.Net反射生成,然后使用Excel互操作推送到Excel。透视表也可以使用Excel互操作动态生成/配置 我需要计算并显示一个字段,该字段将计算AmountA大于0的行数。我还需要对AmountB和AmountC执行相同的操作。结果应按以下顺序显示在数据透视表的同一行级别上:AmountA
AmountA
,AmountB
和AmountC
我正在使用Excel中的透视表为这些数据创建一个报告。透视表的源范围通常使用.Net反射生成,然后使用Excel互操作推送到Excel。透视表也可以使用Excel互操作动态生成/配置
我需要计算并显示一个字段,该字段将计算AmountA
大于0的行数。我还需要对AmountB
和AmountC
执行相同的操作。结果应按以下顺序显示在数据透视表的同一行级别上:AmountA
-CountA
-AmountB
-CountB
-AmountC
-CountC
。为了更好地理解我试图实现的目标,请考虑一个按count汇总的透视表字段,但其行为类似于COUNTIF
函数。例如,如果ProductX组有10行,只有8行的AmountA
大于0,则它应该显示CountA
为8
我已经尝试使用公式=IF(AmountA>0,1,0)
添加一个计算字段,然后在此字段上求和,但似乎该公式应用于分组值,而不是每行的实际AmountA
。例如,如果组ProductX的AmountA之和大于0,则即使AmountA大于0的行的实际计数为8,它也将显示计数1(AmountA之和
>0)
我还考虑在源范围中添加新的列,这些列将使用类似于=IF(AmountA>0,1,0)
的公式,然后在透视表中包含它们和一个和。但是,我希望避免这种情况,因为我一般会生成源代码范围,并且调整它将需要大量的重构
我曾考虑在视图中添加额外的列来表示计数,但我认为视图不应该负责显示数据;这将是报告的一项工作。另外,我看不出CountA
列与每一行有什么关系,因为它的AmountA
大于或不大于0
< P> >,是否有可能在数据透视表字段中复制<代码> CONTIFF < /代码>行为,或者我应该考虑在别处处理计数吗?< /P> < P>考虑下面的数据示例:
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或更高的值(即将它们与等于零的值分开)
设置:
如果您隐藏了D、E、H和I列,那么您似乎获得了所需的输出。我最终放弃了将新列添加到源范围定义公式中,类似于
=If(AmountA>0,1,0)
,,然后将这些列与数据透视表中的计数摘要一起使用。请发布您的代码。Excel互操作代码与实际问题无关,我提到它只是为了提供上下文,并抛开将其他列添加到源范围的想法,因为我生成它的方式不同。我只是说,我知道这样可以解决问题,但我正试图在放弃之前找到另一个解决方案。如果不能直接在pivot表或Excel中完成,我将接受答案并重构我自己的代码或SQL视图来解决这个问题。