Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何计算值大于0的透视表的行数_C#_.net_Vb.net_Excel_Excel Interop - Fatal编程技术网

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

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

我有一个SQL视图,它返回包含两个“value”列的行。为了简单起见,我们将它们称为
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或更高的值(即将它们与等于零的值分开)

设置:

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

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


    如果您隐藏了D、E、H和I列,那么您似乎获得了所需的输出。

    我最终放弃了将新列添加到源范围定义公式中,类似于
    =If(AmountA>0,1,0)
    ,,然后将这些列与数据透视表中的计数摘要一起使用。

    请发布您的代码。Excel互操作代码与实际问题无关,我提到它只是为了提供上下文,并抛开将其他列添加到源范围的想法,因为我生成它的方式不同。我只是说,我知道这样可以解决问题,但我正试图在放弃之前找到另一个解决方案。如果不能直接在pivot表或Excel中完成,我将接受答案并重构我自己的代码或SQL视图来解决这个问题。