我有一个SQL视图,它返回包含几个“value”列的行。为简单起见,我们称之为AmountA
,AmountB
和AmountC
。
我在Excel中使用数据透视表来为该数据创建报告。数据透视表的源范围通常使用.Net反射生成,然后使用Excel Interop推送到Excel。数据透视表也是使用Excel Interop动态生成/配置的。
我需要计算并显示一个字段,该字段将计算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 的Sum of AmountA
大于0,即使实际的行数,它也会显示1(Sum of AmountA
> 0)的计数AmountA
大于0的是8。
我还考虑在源范围中添加使用类似于=IF(AmountA>0,1,0)
的公式的新列,然后在数据透视表中包含它们。但是,我想避免这种情况,因为我通常会生成源范围并进行调整,这需要大量的重构。
我考虑过在视图中添加其他列来表示计数,但我认为视图不应该负责呈现数据;这将是报告的工作。另外,我无法看到CountA
列如何与每一行相关,因为它具有或不具有大于0的AmountA
。
那么,是否可以在数据透视表字段上重现COUNTIF
行为,或者我应该考虑在其他地方处理计数?
答案 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和更高的值(即将它们与等于零的值分开)。
设置:
唯一的问题是您需要为每个变量(A,B和C)创建一个数据透视表。
请参阅下面的屏幕截图,以便更好地理解:
如果你隐藏D,E,H和I列,你似乎有了所需的输出。
答案 1 :(得分:0)
我最终决定将新列修改为定义类似于=IF(AmountA>0,1,0)
的公式的源范围,然后在数据透视表中使用带有计数摘要的列。