如何使用多个标准来计算表中值的唯一出现次数?

我正在计算在指定的时间范围(1个月,3个月,6个月,1年)内login的每个angular色(admin,mod,一般用户等)的用户百分比。 编辑我从中提取的数据表不是一个选项,因为这个电子表格应该是自我计算的(如果这是有道理的)。 现在我只需要数字,因为计算%应该很简单。

我正在使用的列是id,eventTime,ScreenName和userGroup。

例如,我想统计在上个月内从userGroup“admin”login的用户数量。 使用ScreenName,因为它是唯一的,偶数,因为我..从我logging的时间,用户名,用户组和用户在网站上看到的每个页面的页面名称,以便用户可能有几个条目天。

我到目前为止写的代码是:

=SUMPRODUCT(((data!$B:$B>(TODAY()-30))*(data!$B:$B<=TODAY()))*(data!$G:$G=G$1)) 

“数据”是我试图计数的工作表。

这里有一些伪代码来帮助:

 SUMPRODUCT((eventTime>30 days ago)*(evenTime<todays date))*(userGroup = referenced userGroup)) 

如果我以pipe理员身份login并且继续查看网站上的七个页面,则数据将有七个不同的行存储page / time / myusername / myrole数据。 上面的公式计算每个单独的实例,我的用户名popup,而不是有多less用户已经login。例如,我希望它返回“1”,因为只有一个用户login该月,即使他们看了几页。 但方程返回“7”。

TL:DR我想列出在指定的时间范围内的活跃用户的数量。 我的惯例是一个月。 但我所需要的只是一次只计算唯一的屏幕名称/每个屏幕名称。

数据看起来像从哪里来的例子

如果你有一个所有ScreenNames(只列出一次,名为ScreenNamesList )的列表,那么最简单的方法就是这样,假设ScreenNames在列A中:

=SUMPRODUCT((COUNTIFS(data!$B:$B,">"&TODAY()-30,data!$B:$B,"<="&TODAY(),data!$G:$G,G$1,data!$A:$A,ScreenNamesList)>0)+0)

….但如果你没有这样的清单,那么你可以使用这个公式 – 减less注意范围,整列将非常缓慢:

=SUM(IF(FREQUENCY(IF(data!$B$2:$B$1000>TODAY()-30,IF(data!$B$2:$B$1000<=TODAY(),IF(data!$G$2:$G$1000=G$1,MATCH(data!$A$2:$A$1000,data!$A$2:$A$1000,0)))),ROW(data!$A$2:$A$1000)-ROW(data!$A$2)+1),1))

公式需要用CTRL + SHIFT + ENTER确认