观远 BI

数据集预警合并多条预警

创建于 2023-04-11 / 最近更新于 2023-04-12 / 1532
字体: [默认] [大] [更大]

场景

上一篇文档 《巧用预警推送卡片明细到个人》介绍了如何使用数据集预警推送数据明细给对应用户,但是由于每一行符合条件的数据都会单独推送一条信息,数据行数过多的情况下频繁推送反而会带来以下问题:

  • 同一个预警内容的邮件或者消息发了N条,看了头疼?

  • 同一个主题的内容挤得满满当当,看得眼花缭乱?

  • 周末和节假日不想收到预警怎么办?

图片.png

本文将介绍同一个收件人满足条件的数据有多行时,如何将预警合并为一条,且仅工作日推送。最终效果如下图。

图片.png

实现原理

用ETL把数据聚合为每个用户只有一行数据,换行显示;判断日期是否是工作日。

实现步骤

1. 多字段拼接为一个字段

在ETL里先把数据按照日期、用户、店铺名称聚合好,然后新建计算字段,把需要在预警中显示的多个字段拼接为一个字段。

concat('店铺名称:',[店铺名称],', 达标数:',[达标数])
或者 
'店铺名称:'||[店铺名称]||', 达标数:'||[达标数]

图片.png

2. 数据对齐

从上图预览结果来看,每行内容长短不一,无法像表格一样对齐,这里我们需要在“店铺名称”后面插入全角空格使数据对齐。

1)新加“添加计算列”算子,用窗口函数计算[店铺名称]的最大长度,相减得到和当前店铺名称的[长度差]

max(length([店铺名称]))over(partition by [用户],[日期])-length([店铺名称])

2)调整2个“添加计算列”算子顺序,修改字段[内容1]公式为:

concat('店铺名称:',[店铺名称],repeat(' ',[长度差]),', 达标数:',[达标数])

图片.png

3. 多行数据合并为一行,换行展示

新建「分组聚合」,按照日期、用户聚合,新建计算字段[未达标项]并拖入数值栏。

concat_ws('\n',collect_set([内容1]))

注意:换行符在ETL预览和数据集预览时无法生效,但是在前端(卡片、推送)展示时是生效的,故此时请忽略预览结果。

图片.png

4. 判断节假日

新建计算字段[工作日判断]和[今天],筛选当天数据后输出数据集。如果仅需要周一到周五推送预警,则可以用函数 DAYOFWEEK(周日为1,周一为2)来筛选;如果需要精确判断工作日和所有节假日,则需要准备专门的节假日日期为表并关联,具体请参考《节假日数据区分和对比》

case when DAYOFWEEK(current_date())>=2 and DAYOFWEEK(current_date())<=6 then 1 
else 0 end

图片.png

5. 设置数据集预警

图片.png

注意:钉钉、企微推送消息有字符长度限制(上限512字符、非中文字数),如果超过上限则无法完整显示,这种情况建议使用邮件推送(不同版本邮件推送显示可能存在差别,待修复)或者仅在文本中显示汇总,通过链接查看卡片明细。

11 人点赞过