衍生指标配置(组合指标配置)
此功能的好处
此功能的好处有两点:
- 配置起来相对javascript方式更简单
- 能够让系统的归因分析中出现指标树分析,如下图所示:
简单方法:问答模式
此方式比较直观,唯一需要注意的一点是,公式的各个组成部份都一定要单独能在问答里面成功问出才行。
高级方法:通过javascript进行配置
新建一个指标
选择js组合模式
js组合模式里面一共有三个函数需要实现。其中genComponents和mergeComponents是必填。 shouldSplitGroupby选填。
- genComponents的作用是申明这个指标由哪些指标组成。
- mergeComponents的作用是写出这些指标的计算公式并得到最后结果。
- shouldSplitGroupby的作用是申明当遇到分组的时候,是一起计算还是分开计算。关于此函数的文档见这里
genComponents
作用是申明这个指标由哪些指标组成。
函数签名如下:
(predItem, {schema, logicform, helperFunctions}) => {
// 这个指标由3个指标组成
const preds = [];
// 第一个指标
preds.push({
...predItem, // 继承问答时候,本指标的筛选条件或者是其他参数
schema: "yingshou", // 覆盖predItem里面的schema(在跨表的时候填写)
operator: "营收", // 第一个指标的operator
name: "营收", // 给子指标的结果起一个名字,相当于sql的AS。建议和operator名称保持一致。
});
// 第二个指标
preds.push({
...predItem, // 继承问答时候,本指标的筛选条件或者是其他参数
schema: "chengben", // 覆盖predItem里面的schema(在跨表的时候填写)
operator: "成本", // 第一个指标的operator
name: "成本", // 给子指标的结果起一个名字,相当于sql的AS。建议和operator名称保持一致。
});
// 第三个指标
preds.push({
...predItem, // 继承问答时候,本指标的筛选条件或者是其他参数
schema: "feiyongmingxi",
operator: "期间费用",
name: "期间费用",
});
return preds;
}
-
此函数返回一个preds数组。每一个predItem都是Logicform类型中的predItem,见这里
-
此函数的第一个参数是operator为本指标的predItem,里面可能会包含一些query,accumulate字段。代表一些筛选条件和是否累加。
-
此函数的第二个参数是helperFunctions,是一些帮助函数,比较典型的是moment。
以下是获取moment的办法:
const {moment} = helperFunctions;
// 使用moment
if(moment().year() === 2025) {
// xxx
}
mergeComponents
作用是写出这些指标的计算公式并得到最后结果。
函数签名如下:
async (m) => {
return 10.0; // 返回指标计算结果。
// 例子
// return m.营收 - m.成本 - m.期间费用
}
此函数的入参m是一个字典,里面保存了第一个步骤算出来的3个子指标的结果。字典的键值为第一个步骤申明里面,predItem的name字段。 按照上述例子,
m = {
营收: 100,
成本: 20,
期间费用: 10,
}