Excel根据开始/结束时间计算并发会话数

use*_*742 3 microsoft-excel-2007 worksheet-function microsoft-excel microsoft-excel-2010

我有大量数据需要处理。在 A 列中,我有一个用户名,在 BI 列中有一个会话开始日期/时间,在 CI 列中有会话结束日期/时间。

我正在尝试根据用户帐户计算任何时候正在进行的并发会话数。我遇到的难题是一个用户可能同时进行多个会话。

例如:

User     Start Time               End Time            Desired Result (license count)

JW      03/24/2015 14:00:44      03/24/2015 14:09:57     -->    4
TT      03/24/2015 13:58:14      03/24/2015 14:21:08     -->    3
DQ      03/24/2015 13:53:10      03/24/2015 14:15:39     -->    3
BB      03/24/2015 13:50:55      03/24/2015 14:20:42     -->    2
BA      03/24/2015 13:43:02      03/24/2015 13:57:26     -->    2
JW      03/24/2015 13:40:30      03/24/2015 13:48:38     -->    1
BA      03/24/2015 13:18:26      03/24/2015 13:18:44     -->    1
BA      03/24/2015 13:15:18      03/24/2015 13:15:22     -->    1
CT      03/24/2015 11:56:55      03/24/2015 11:58:21     -->    1
CT      03/24/2015 11:53:23      03/24/2015 11:56:55     -->    1
CT      03/24/2015 11:51:50      03/24/2015 11:53:23     -->    1
CT      03/24/2015 11:48:11      03/24/2015 12:16:36     -->    1
CT      03/24/2015 11:36:54      03/24/2015 11:37:50     -->    1
CT      03/24/2015 11:33:52      03/24/2015 11:39:38     -->    1
CT      03/24/2015 11:31:25      03/24/2015 11:34:01     -->    1
Run Code Online (Sandbox Code Playgroud)

第四列显示了我希望能够用公式计算的结果。以上数据可以用图形表示为:

?条形图

正如您在示例末尾(以及图表底部)所看到的,用户 CT 一次有多个会话。这些连接将仅计为一个许可证。

如果我需要澄清这一点,请告诉我。

bar*_*ini 5

假设您的数据在列AC,从第 2 行开始,那么您可以在D2

=SUM(IF(FREQUENCY(IF(B$2:B$16<=B2,IF(C$2:C$16>=B2,MATCH(A$2:A$16,A$2:A$16,0))),ROW(A$2:A$16)-ROW(A$2)+1),1))

确诊CTRL+ SHIFT+ENTER和抄下来列

解释:

这是一种常用技术,用于获取一列(在本例中为用户)中不同值的计数,其中其他列中满足某些条件(在本例中,最新开始时间/日期介于开始时间/日期和结束时间之间)其他列中的时间/日期)。

“数据数组”是满足时间条件的行FREQUENCYMATCH函数结果-MATCH并将找到第一个匹配值,因此您有重复用户MATCH为每个返回相同的数字(并且您得到FALSE条件的行没有遇到)

FREQUENCY“箱”包含了所有可能的结果MATCH(在这种情况下,1至15),所以如果条件(该时间段包含了最迟开始时间)得到满足,用户是一样的,同样的数量在返回数据数组和它一样bin......所以计算> 0的bin数量就足够了,以获得不同用户的数量。

例如,专门针对第 2 行,数据数组变为:

{1;2;3;4;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE}

并且将 4 个不同的值返回到 4 个不同的 bin,因此您得到的结果为 4

....但对于第 10 行,数据数组变为:

{FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;FALSE;9;9;FALSE;9;FALSE;FALSE;FALSE}

其中有 3 行与时间条件匹配.....但都是针对同一个用户 ( CT),因此该MATCH函数A2:A16为所有三个返回 9(第一个“CT”条目的位置),因此FREQUENCY获得 3 个值在同一个 bin 中,所以公式解析为:

=SUM(IF({0;0;0;0;0;0;0;0;3;0;0;0;0;0;0;0},1))

IF函数为由返回的数组中的每个非零值返回一个 1FREQUENCY并将SUM这些 1 求和.....但只有一个非零值所以结果是1(表示当时打开会话的不同用户的数量)

见附截图

在此处输入图片说明