该功能用于解析和验证指标计算公式,自动提取公式中的变量并在Neo4j数据库中查找匹配的元数据记录。
文件: app/core/data_metric/metric_interface.py
函数: metric_check(formula_text)
formula_text (str): 计算公式文本,格式为 "指标名称 = 计算表达式"[
{
"variable": "变量名",
"name_zh": "中文名称",
"name_en": "英文名称",
"id": 节点ID,
"create_time": "创建时间",
"findit": 1或0
}
]
公式解析
+, -, *, /, (), (), [], {}变量识别
元数据匹配
文件: app/api/data_metric/routes.py
路由: /api/data/metric/check
方法: POST
{
"formula": "销售额 = 单价 * 数量 + 运费"
}
{
"code": 200,
"message": "success",
"data": [
{
"variable": "单价",
"name_zh": "单价",
"name_en": "unit_price",
"id": 12345,
"create_time": "2024-01-15 10:30:00",
"findit": 1
},
{
"variable": "数量",
"name_zh": "数量",
"name_en": "quantity",
"id": 12346,
"create_time": "2024-01-15 10:31:00",
"findit": 1
},
{
"variable": "运费",
"name_zh": "",
"name_en": "",
"id": null,
"create_time": "",
"findit": 0
}
]
}
在创建或编辑指标时,验证公式中的变量是否都存在于元数据库中。
# 前端发送公式
formula = "利润率 = (销售收入 - 成本) / 销售收入 * 100"
# 后端返回检查结果
# findit=1: 变量存在
# findit=0: 变量不存在,需要用户确认或创建
了解指标依赖哪些基础元数据,便于进行数据血缘追踪。
发现公式中引用但未在元数据库中定义的变量,提前预防数据质量问题。
为用户提供变量的详细信息(中文名、英文名、创建时间等),辅助指标定义。
输入: "销售额 = 单价 * 数量"
结果: 单价和数量都在元数据库中找到(findit=1)
操作: 可以直接保存指标
输入: "总成本 = 原材料成本 + 人工成本 + 其他费用"
结果: 原材料成本和人工成本找到,其他费用未找到(findit=0)
操作: 提示用户"其他费用"未定义,询问是否创建新元数据
输入: "ROI = (投资收益 - 投资成本) / 投资成本 * 100"
结果: 返回投资收益和投资成本的匹配状态
操作: 根据匹配结果决定是否可以保存
测试文件位于: tests/test_metric_check.py
包含以下测试用例:
运行测试:
python -m pytest tests/test_metric_check.py -v
无需额外配置,使用现有的Neo4j数据库连接。
使用应用级别的日志记录器,关键操作都有日志记录: