refactor: define electric BI metric semantics

This commit is contained in:
kkfluous
2026-08-07 14:48:50 +08:00
parent 757ed1ebd6
commit cf9782562b
5 changed files with 114 additions and 10 deletions
+86 -4
View File
@@ -1,5 +1,5 @@
export type MetricDomain = 'mileage' | 'hydrogen';
export type MetricUnit = 'km' | 'kg' | 'cny' | 'percent' | 'vehicle' | 'station' | 'order' | 'timestamp';
export type MetricDomain = 'mileage' | 'hydrogen' | 'electric';
export type MetricUnit = 'km' | 'kg' | 'kwh' | 'cny' | 'cny-per-kwh' | 'percent' | 'vehicle' | 'station' | 'order' | 'timestamp';
export type MetricAggregation = 'sum' | 'count' | 'derived' | 'weighted-ratio' | 'distinct-count' | 'latest';
export type MetricTimeSemantics = 'flow' | 'snapshot' | 'freshness';
@@ -14,10 +14,10 @@ export interface MetricDefinition {
formula: string;
sources: readonly string[];
dimensions: readonly string[];
drillEntity: 'vehicle' | 'assessment-target' | 'hydrogen-station' | 'hydrogen-customer' | 'hydrogen-order';
drillEntity: 'vehicle' | 'assessment-target' | 'hydrogen-station' | 'hydrogen-customer' | 'hydrogen-order' | 'electric-charge-order';
}
export const METRIC_CATALOG_VERSION = 2;
export const METRIC_CATALOG_VERSION = 3;
const MILEAGE_METRICS: readonly MetricDefinition[] = [
{
@@ -194,9 +194,91 @@ const HYDROGEN_METRICS: readonly MetricDefinition[] = [
},
];
const ELECTRIC_METRICS: readonly MetricDefinition[] = [
{
id: 'electric.charge_energy',
domain: 'electric',
label: '充电量',
description: '所选时间和车辆归属范围内,去重导入充电订单的电量之和。',
unit: 'kwh',
aggregation: 'sum',
timeSemantics: 'flow',
formula: 'SUM(kwh)',
sources: ['bi_ele_charge_record'],
dimensions: ['date', 'station', 'region', 'operating-company', 'vehicle-kind', 'customer', 'plate', 'order-status'],
drillEntity: 'electric-charge-order',
},
{
id: 'electric.charge_total_fee',
domain: 'electric',
label: '充电费用',
description: '导入账单的充电费用之和;当前数据中等于充电电费与充电服务费之和,零费用订单仍参与统计。',
unit: 'cny',
aggregation: 'sum',
timeSemantics: 'flow',
formula: 'SUM(fee)',
sources: ['bi_ele_charge_record'],
dimensions: ['date', 'station', 'region', 'operating-company', 'vehicle-kind', 'customer', 'plate', 'order-status'],
drillEntity: 'electric-charge-order',
},
{
id: 'electric.electricity_fee',
domain: 'electric',
label: '充电电费',
description: '导入账单中充电电费字段 e_fee 之和,不含服务费。',
unit: 'cny',
aggregation: 'sum',
timeSemantics: 'flow',
formula: 'SUM(e_fee)',
sources: ['bi_ele_charge_record'],
dimensions: ['date', 'station', 'region', 'operating-company', 'vehicle-kind', 'customer', 'plate'],
drillEntity: 'electric-charge-order',
},
{
id: 'electric.service_fee',
domain: 'electric',
label: '充电服务费',
description: '导入账单中充电服务费字段 service_fee 之和。',
unit: 'cny',
aggregation: 'sum',
timeSemantics: 'flow',
formula: 'SUM(service_fee)',
sources: ['bi_ele_charge_record'],
dimensions: ['date', 'station', 'region', 'operating-company', 'vehicle-kind', 'customer', 'plate'],
drillEntity: 'electric-charge-order',
},
{
id: 'electric.blended_cost_intensity',
domain: 'electric',
label: '综合费用强度',
description: '充电费用除以充电量;包含零费用订单,用于观察综合支出强度,不等同于合同电价或单笔订单单价。',
unit: 'cny-per-kwh',
aggregation: 'weighted-ratio',
timeSemantics: 'flow',
formula: 'SUM(fee) / NULLIF(SUM(kwh), 0)',
sources: ['bi_ele_charge_record'],
dimensions: ['date', 'station', 'region', 'operating-company', 'vehicle-kind', 'customer'],
drillEntity: 'electric-charge-order',
},
{
id: 'electric.charge_order_count',
domain: 'electric',
label: '充电订单数',
description: '导入充电账单中按订单编号去重后的订单数量。',
unit: 'order',
aggregation: 'distinct-count',
timeSemantics: 'flow',
formula: 'COUNT(DISTINCT order_no)',
sources: ['bi_ele_charge_record'],
dimensions: ['date', 'station', 'region', 'operating-company', 'vehicle-kind', 'customer', 'plate', 'order-status'],
drillEntity: 'electric-charge-order',
},
];
export const METRIC_CATALOG: readonly MetricDefinition[] = [
...MILEAGE_METRICS,
...HYDROGEN_METRICS,
...ELECTRIC_METRICS,
];
export function isMetricDomain(value: string): value is MetricDomain {