如何创建一个按时间戳和数值排序并按电子邮件地址分组的列

如何创建一个按时间戳和数值排序并按电子邮件地址分组的列

我想创建一个列,按电子邮件地址对时间戳 1、2、3、4、5 等进行分组。最终结果将有一个字段,用数字 1 表示该电子邮件地址的第一个时间戳,用 2 表示第二个时间戳,依此类推。

这将是期望的最终结果。

电子邮件 时间戳 新领域
[电子邮件保护] 下午 1 点 1
[电子邮件保护] 2PM 2
[电子邮件保护] 下午 3 点 3
[电子邮件保护] 下午 3 点 1
[电子邮件保护] 下午4点 2

答案1

这是一个不需要您预先对数据进行排序的公式。无论和列count的顺序如何,列中的值始终是正确的。EmailTimestamp

公式

=LET(
  _arr, A2:B10,
  _seq, HSTACK(SEQUENCE(COUNTA(_arr)/2),_arr),
  _sort, SORTBY(_seq,INDEX(_seq,,2),1,INDEX(_seq,,3),1),
  _names, INDEX(_sort,,2),
  _counters, TEXTSPLIT(TEXTJOIN(",",TRUE, MAP(UNIQUE(_names), LAMBDA(u,
        TEXTJOIN(",",TRUE,SEQUENCE(COUNTA(FILTER(_names,_names=u))))))),,","),
  FILTER(SORTBY(HSTACK(_sort,_counters),INDEX(_sort,,1),1),{0,0,0,1})
  )

计数器(按当前排序顺序列出)

Email按然后按排序Time

  

按顺序排序TestTime

Test(升序)然后通过Time(升序)

公式解释

下面的公式与上面的相同,但是_counters变量以及最终FILTER函数已分解为额外的步骤,以便于遵循。

Line    Formula
----+------------------------------------------
 1  | =LET(
 2  |   _arr, A2:B10,
 3  |   _seq, HSTACK(SEQUENCE(COUNTA(_arr)/2),_arr),
 4  |   _sort, SORTBY(_seq,INDEX(_seq,,2),1,INDEX(_seq,,3),1),
 5  |   _names, INDEX(_sort,,2),
 6  |   _counters, MAP(UNIQUE(_names), LAMBDA(u,
 7  |       TEXTJOIN(",",TRUE,SEQUENCE(COUNTA(FILTER(_names,_names=u)))))),
 8  |   _joined, TEXTJOIN(",",TRUE,_counters),
 9  |   _split, TEXTSPLIT(_joined,,","),
10  |   _combined, HSTACK(_sort,_split),
11  |   _storedsort, SORTBY(_combined, INDEX(_combined,,1),1),
12  |   _countersonly, FILTER(_storedsort,{0,0,0,1}),
13  |   _countersonly )

线 笔记
1 使用 Excel函数用于存储公式中的计算、值和定义名称。
2 _arr:   存储初始EmailTimestamp数据
3 _seq:   顺序函数用于获取数据的当前顺序,以便稍后恢复。 堆栈函数用于将其添加_arr为第一列
4 _sort:   排序方式函数允许使用以下方式通过电子邮件订购数据指数获取第二列_seq,然后Timestamp再次使用指数获取第三列_seq
5 _names:   用途指数获取第 2 列中的电子邮件列表_sort
6 _counters:   独特的获取来自的唯一电子邮件列表_names,并将每个唯一的电子邮件传递到拉姆达函数使用地图LAMBDA 函数u在其公式中用作映射值的占位符。
7 _counters:   (继续)每次映射一个值时,_names都会针对该值进行过滤,并且筛选结果计算使用康塔然后该计数用于创建一个顺序数字以 1 为增量,从 #1 到康塔结果。最后,文本连接将数字序列组合为一个以逗号分隔的字符串,以避免嵌套数组错误。
8 _joined:   文本连接再次用于将各个数字序列组合成一个以逗号分隔的长字符串,其中包含完整的顺序所有电子邮件地址。
 9 _split:  文本分割采用长逗号分隔的字符串,并使用每个逗号将其拆分到单个列上,以确定何时插入新行。
10 _combined:   与第 3 行类似,堆栈再次用于合并_split来自_sort
11 _storedsort:   排序方式Email可以恢复和列的原始顺序,其中Timestamp第一列_combined顺序创建于第 3 行
12 _countersonly:   采用一种技术筛选允许使用0跳过一列,使用 来显示一列,从而有选择地返回列。由于第 4 列相对于和列1的原始排序顺序而言顺序正确,因此现在可以丢弃 1-3 列 ( )EmailTimestamp{0,0,0,1}

第 3 行:_seq

第 4 行:_sort

第 5 行:_names

第 6 至 7 行:_counters

第 8 行:_joined

第 9 行:_split

第 10 行:_combined

第 11 行:_storedsort

第 12 行:_countersonly

第 12 行:_countersonly使用
sort by Email(asc) 然后Time(asc)

相关内容