简单的数据透视表来计算唯一的值
这似乎是一个简单的数据透视表来学习。 我想为我正在分组的特定值计算唯一值。
例如,我有这样的:
ABC 123 ABC 123 ABC 123 DEF 456 DEF 567 DEF 456 DEF 456
我想要的是一个数据透视表,告诉我这一点:
ABC 1 DEF 2
我创build的简单数据透视表只是给了我这个数(有多less行):
ABC 3 DEF 4
但我想要的唯一值的数量。
我真正想要做的是找出第一列中的哪些值在所有行的第二列中都没有相同的值。 换句话说,“ABC”是“好”,“DEF”是“坏”
我相信有一个更简单的方法来做到这一点,但认为我会给数据透视表一个尝试…
插入第三列,并在Cell C2
粘贴此公式
=IF(SUMPRODUCT(($A$2:$A2=A2)*($B$2:$B2=B2))>1,0,1)
并把它复制下来。 现在基于第一列和第三列创build您的数据透视表。 看快照
更新:现在可以使用Excel 2013自动执行此操作。我将其创build为新的答案,因为我的上一个答案实际上解决了一个稍有不同的问题。
如果你有这个版本,那么select你的数据来创build一个数据透视表,当你创build你的数据表时,确保选项'添加这个数据到数据模型'checkbox是检查(见下文)。
然后,当数据透视表打开时,通常会创build行,列和值。 然后点击你想要计算不同计数的字段并编辑字段值设置:
最后,向下滚动到最后一个选项,然后select“区分计数”。
这应该更新您的数据透视表值,以显示您正在寻找的数据。
我想在混合中添加一个额外的选项,不需要公式,但是如果您需要在两个不同的列中计算集合中的唯一值,可能会有所帮助。 使用原来的例子,我没有:
ABC 123 ABC 123 ABC 123 DEF 456 DEF 567 DEF 456 DEF 456
并希望它显示为:
ABC 1 DEF 2
但更像是:
ABC 123 ABC 123 ABC 123 ABC 456 DEF 123 DEF 456 DEF 567 DEF 456 DEF 456
并希望它显示为:
ABC 123 3 456 1 DEF 123 1 456 3 567 1
我发现最好的方式来获得我的数据到这种格式,然后能够进一步操纵它是使用以下内容:
一旦你select'运行总数在'然后select二级数据集的标题(在这种情况下,它将是数据集的标题或列标题,包括123,456和567)。 这将使您在主数据集中获得该组中项目总数的最大值。
然后,我复制这些数据,将其粘贴为值,然后将其放在另一个数据透视表中,以更轻松地操作它。
仅供参考,我有大约二十五万行数据,所以这比一些公式方法好得多,尤其是那些试图在两列/数据集之间进行比较的方法,因为它会使应用程序崩溃。
执行“不同计数”的function是Excel 2013的一部分,但不会自动启用。
所以,如果你运行一个EXCEL 2013的副本,这里有一个很好的方法来解决这个问题,而不需要通过一个函数的麻烦: http : //datapigtechnologies.com/blog/index.php/distinct-count-in-pivot-tables-终于,在-Excel的2013 /
见Debra Dalgleish的计数唯一项目
对于下面的公式来说,没有必要对表格进行sorting,以便为每个存在的唯一值返回1。
假定问题中提供的数据的表格范围为A1:B7,请在单元格C1中input以下公式:
=IF(COUNTIF($B$1:$B1,B1)>1,0,COUNTIF($B$1:$B1,B1))
将该公式复制到所有行,最后一行将包含:
=IF(COUNTIF($B$1:$B7,B7)>1,0,COUNTIF($B$1:$B7,B7))
这会导致第一次findlogging时返回1,之后会返回0。
简单地总结数据透视表中的列
我发现最简单的方法是使用Value Field Settings
下的Distinct Count
选项( 左键单击Values
窗格中的字段)。 Distinct Count
选项位于列表的最底部。
这里是之前(TOP;正常Count
)和之后(BOTTOM; Distinct Count
)
Siddharth的回答非常棒。
但是 ,这种技术在处理大量数据时可能会遇到麻烦(我的电脑冻结了50000行)。 一些较less的处理器密集型方法:
单一唯一性检查
- 按两列sorting(本例中为A,B)
-
使用一个看起来较less数据的公式
=IF(SUMPRODUCT(($A2:$A3=A2)*($B2:$B3=B2))>1,0,1)
多重唯一性检查
如果你需要检查不同列的唯一性,你不能依靠两种。
代替,
- sorting单列(A)
-
添加涵盖每个分组最大logging数的公式。 如果ABC可能有50行,公式将会是
=IF(SUMPRODUCT(($A2:$A49=A2)*($B2:$B49=B2))>1,0,1)
Excel 2013可以做统计不同的枢轴。 如果没有访问到2013年,而且数据量较less,我制作两份原始数据,在副本b中,select两列并删除重复项。 然后制作数据透视表并计算你的列数b。
我对这个问题的解决方法与我在这里看到的有点不同,所以我会分享。
- (首先复制你的数据)
- 连接列
- 删除连接列上的重复项
- 最后 – 在结果集上旋转
注:我想包括图像,使之更容易理解,但不能,因为这是我的第一篇文章;)
您可以使用COUNTIFS作为多个条件,
= 1 / COUNTIFS(A:A,A2,B:B,B2)然后向下拖动。 你可以在那里放置尽可能多的标准,但是这往往需要花费很多时间来处理。
步骤1.添加一列
第2步。在第1条logging中使用公式= IF(COUNTIF(C2:$C$2410,C2)>1,0,1)
第3步。将其拖到所有logging
第4步。使用公式在列中过滤“1”
您可以创build一个额外的列来存储唯一性,然后在您的数据透视表中进行总结。
我的意思是,单元格C1
应该总是1
。 单元格C2
应该包含公式=IF(COUNTIF($A$1:$A1,$A2)*COUNTIF($B$1:$B1,$B2)>0,0,1)
。 复制这个公式,所以单元格C3
将包含=IF(COUNTIF($A$1:$A2,$A3)*COUNTIF($B$1:$B2,$B3)>0,0,1)
等等。
如果你有一个标题单元格,你会想要把这些全部向下移动,你的C3
公式应该是=IF(COUNTIF($A$2:$A2,$A3)*COUNTIF($B$2:$B2,$B3)>0,0,1)
。
如果你有数据sorting..我build议使用下面的公式
=IF(OR(A2<>A3,B2<>B3),1,0)
这是因为它使用更less的单元格进行计算。
我通常按字段sorting数据,我需要做不同的计数,然后使用IF(A2 = A1,0,1); 你会得到每个ID组的第一行得到1。 简单,不需要任何时间来计算大型数据集。
我find了一个更简单的方法。 参考Siddarth Rout的例子,如果我想计算列A中的唯一值:
- 添加一个新的列C,并用公式“= 1 / COUNTIF($ A:$ A,A2)”填充C2
- 将公式拖至列的其余部分
- 以A列作为行标签,以及Sum(C列)值来获取列A中唯一值的数量