1. 概述
1.1 应用场景
用户需要对活跃客户的占比进行分析,但由于不断变化的业务需求,活跃客户的定义会不定期修改。
例如,上半年活跃客户被定义为在过去 3 个月内至少在商城下单 2 次的连锁客户,而下半年的定义则是在过去 6 个月内至少下单 3 次的客户。这种指标变化需要 IT 团队重新评估相关数据的计算逻辑,可能会带来繁重的工作量。
1.2 实现思路
将业务指标中的数值参数化,例如本文 1.1 节场景中的活跃客户指标:近 X 个月,下单次数,可作为参数进行自定义修改。
1.3 注意事项
本文示例不适合定期更新数据,只适合一次性取出活跃客户数据。
1.4 任务展示
FineDataLink 中的数据处理过程,详情参见:https://demo.finedatalink.com/ 「高频指标借助参数实现轻量化修改」。
2. 操作步骤
2.1 指标数值参数化准备
将活跃客户指标:近 X 个月,下单次数,保存在数据库表中,指标若发生变化,直接在数据库表中修改即可。
本文示例中,将下单次数(times)、近 X 个月(gap)保存在名为「参数」的表中。
2.2 指标数值参数化
1)新建定时任务,拖入「参数赋值」节点,定义参数:times(下单次数)、gap(近 X 个月)、first_day(当月第一天)、last_day(当月最后一天)。
first_day(当月第一天)、last_day(当月最后一天)便于后续「条件分支」节点判断是否是取出当月的活跃客户数据,当月和非当月取数 SQL 语句不同。
SQL 语句如下:
SELECT *,DATE_FORMAT(CURRENT_DATE, '%Y-%m-01') AS first_day,
LAST_DAY(CURRENT_DATE) AS last_day FROM `demo1`.`参数`
点击「数据预览」,取出数据如下图所示:
2)点击「参数输出」,将取出数据输出为参数。如下图所示:
2.3 定义日期区间参数
有时候用户需要取多个月份的活跃客户数据进行分析,本文示例中,定义参数 time ,取出 2010 年 5、6、7月份的活跃客户数据。
本文示例中,时间参数 time 是存在数据库表中进行维护,实际开发可按照业务情况进行取数。
1)新增「参数赋值」节点,取出 time 参数的值。如下图所示:
2)点击「输出参数」,定义参数 time 。如下图所示:
2.4 循环容器设置
2.4.1 新增循环容器节点
拖入「循环容器」节点,使用参数 time 依次取出 2010 年 5、6、7月份的活跃客户数据。
「循环容器」节点中,选择「遍历循环」,勾选 time 参数。设置界面如下图所示:
2.4.2 判断是否为当月
「循环容器」节点中拖入「条件分支」节点,判断是否取出当月的活跃客户数据。
1)拖入「条件分支」、两个「数据转换」节点。
2)若 time 参数介于 first_day 和 last_day 参数之间,执行数据转换节点(取出当月活跃客户数据);若 time 参数不介于 first_day 和 last_day 参数之间,执行数据转换1节点(取出 time 时间活跃客户数据)。
「条件分支」节点设置如下图所示:
2.4.3 取出当月活跃客户数据
1)进入数据转换节点,拖入「DB表输入」算子,取出当月活跃客户数据。如下图所示:
SQL 语句如下:取出「订购日期」在近 6 月,且购买次数大于等于三次的客户数据。
SELECT 订单ID, 客户ID, 订购日期, 运货商, 货主名称, 货主地址
FROM `demo1`.`订单`
WHERE 订购日期 >= DATE_SUB(CURRENT_DATE, INTERVAL ${gap} MONTH)
AND 客户ID IN (
SELECT 客户ID
FROM `demo1`.`订单`
WHERE 订购日期 >= DATE_SUB(CURRENT_DATE, INTERVAL ${gap} MONTH)
GROUP BY 客户ID
HAVING COUNT(客户ID) >= ${times}
)
ORDER BY 客户ID, 订单ID;
点击「数据预览」,取出数据如下图所示:
2)拖入「DB表输出」算子,将取出的活跃客户数据输出即可,写入方式选择「追加写入数据」。
3)点击右上角「保存」按钮。
2.4.4 取出非当月活跃客户数据
1)进入数据转换1节点,拖入「DB表输入」算子,取出非当月活跃客户数据。如下图所示:
SQL 语句如下:取出「订购日期」在距离 time 参数 6 个月之内,且购买次数大于等于三次的客户数据。
SELECT 订单ID, 客户ID,订购日期, 运货商, 货主名称, 货主地址
FROM `demo1`.`订单`
WHERE 订购日期 BETWEEN DATE_SUB('${time}', INTERVAL ${gap} MONTH) AND '${time}'
AND 客户ID IN (
SELECT 客户ID
FROM `demo1`.`订单`
WHERE 订购日期 BETWEEN DATE_SUB('${time}', INTERVAL ${gap} MONTH) AND '${time}'
GROUP BY 客户ID
HAVING COUNT(客户ID) >= ${times}
)
ORDER BY 客户ID, 订单ID;
2)拖入「DB表输出」算子,将取出的活跃客户数据输出即可,写入方式选择「追加写入数据」。
3)点击右上角「保存」按钮。
2.5 效果查看
1)点击右上角「保存并运行」按钮,任务执行成功后,如下图所示:
2)数据库表数据如下图所示:
3)用户若想知道当月活跃客户数,可筛选出「订购日期」在近六个月内的「客户ID」数量。