DAX技术需求:双条件下统计人工协助聊天的Distinctcount
DAX解决方案:统计转接人工的聊天会话及关联客户
1. 统计转接人工的唯一聊天会话数
这个度量值会筛选出同一Session ID同时包含"Nei"和"Ja"记录的会话(即机器人转接人工的场景),然后对这些会话去重计数:
转接人工的聊天会话数 = VAR 符合条件的会话 = FILTER( VALUES('聊天记录表'[Session ID]), -- 检查当前会话是否存在"Nei"记录 CALCULATE(COUNTROWS(FILTER('聊天记录表', '聊天记录表'[Assistert av Menneske] = "Nei"))) > 0 && -- 检查当前会话是否存在"Ja"记录 CALCULATE(COUNTROWS(FILTER('聊天记录表', '聊天记录表'[Assistert av Menneske] = "Ja"))) > 0 ) RETURN COUNTROWS(符合条件的会话)
逻辑说明
VALUES('聊天记录表'[Session ID]):先获取所有唯一的会话ID- 嵌套的
CALCULATE分别检查每个会话是否同时存在"Nei"和"Ja"的记录,筛选出符合条件的会话集合 - 最后返回该集合的行数,即唯一的转接人工会话数量
2. 关联转接人工会话的客户Firmakode
由于'Assistert av Menneske'为"Ja"时Firmakode字段为空,我们需要从同一会话中"Nei"的记录里提取对应的客户编码。可以先创建一个计算列来存储每个会话对应的客户编码:
会话对应客户Firmakode = VAR 当前会话 = '聊天记录表'[Session ID] -- 从同会话的"Nei"记录中取Firmakode VAR Nei对应的客户编码 = CALCULATE( MAX('聊天记录表'[Firmakode]), FILTER( '聊天记录表', '聊天记录表'[Session ID] = 当前会话 && '聊天记录表'[Assistert av Menneske] = "Nei" ) ) RETURN -- 仅当会话存在"Ja"记录时返回客户编码,否则为空 IF( CALCULATE( COUNTROWS(FILTER('聊天记录表', '聊天记录表'[Session ID] = 当前会话 && '聊天记录表'[Assistert av Menneske] = "Ja")) > 0, ALL('聊天记录表') ), Nei对应的客户编码, BLANK() )
逻辑说明
- 针对每条记录,先获取其所属的Session ID
- 从同会话的"Nei"记录中提取
Firmakode(用MAX是因为同会话的"Nei"记录应该对应同一个客户编码) - 仅当该会话存在"Ja"记录(即转接了人工)时,返回提取到的客户编码,否则返回空
3. 统计使用人工聊天的唯一客户数
基于上面的计算列,我们可以生成度量值来统计使用人工聊天的唯一客户数量:
使用人工聊天的客户数 = VAR 符合条件的会话 = FILTER( VALUES('聊天记录表'[Session ID]), CALCULATE(COUNTROWS(FILTER('聊天记录表', '聊天记录表'[Assistert av Menneske] = "Nei"))) > 0 && CALCULATE(COUNTROWS(FILTER('聊天记录表', '聊天记录表'[Assistert av Menneske] = "Ja"))) > 0 ) VAR 客户编码集合 = CALCULATETABLE( VALUES('聊天记录表'[会话对应客户Firmakode]), '聊天记录表'[Session ID] IN 符合条件的会话 ) RETURN COUNTROWS(客户编码集合)
逻辑说明
- 先筛选出所有转接人工的会话集合
- 从这些会话对应的记录中提取唯一的客户编码集合
- 返回该集合的行数,即唯一客户数量
内容的提问来源于stack exchange,提问作者Neri Kim
相关产品推荐
相关产品推荐

