Skip to main content

衍生指标配置(组合指标配置)

此功能的好处

此功能的好处有两点:

  1. 配置起来相对javascript方式更简单
  2. 能够让系统的归因分析中出现指标树分析,如下图所示:

输入图片说明

简单方法:问答模式

此方式比较直观,唯一需要注意的一点是,公式的各个组成部份都一定要单独能在问答里面成功问出才行。

高级方法:通过javascript进行配置

新建一个指标

输入图片说明

选择js组合模式

输入图片说明

js组合模式里面一共有三个函数需要实现。其中genComponentsmergeComponents是必填。 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,
}