MetricHub 是一个多租户 SaaS 指标平台,基于 Aloudata CAN Gateway 语义层 API。提供以下核心能力:
当用户意图可以通过浏览器操作完成时,引导用户前往对应页面:
用户意图操作"查看指标目录""有哪些指标""搜索指标"导航到 /:workspaceSlug/catalog"查询XX指标""帮我分析XX"导航到 /:workspaceSlug/query 并预填充指标"查看仪表盘""创建仪表盘"导航到 /:workspaceSlug/dashboards"配置 Gateway""设置 API Key"导航到 /:workspaceSlug/settings/gateway"查看查询历史"导航到 /:workspaceSlug/query/history
以下内容从 metric-query 1.0.2 SKILL.md 原封不动 保留,作为平台查询能力的核心知识:
注意: 当用户需要直接通过 Agent 构建并执行查询 JSON 时,使用本节的所有规则。当用户已登录 MetricHub 前端平台时,引导用户在平台上操作。
Gateway Search API: GET {api_base_url}/api/metrics/search?keyword={关键词}
Gateway Metrics Query API: POST {api_base_url}/api/metrics/query
所有 Gateway 调用通过 MetricHub 后端代理( POST /api/v1/workspaces/{id}/queries/execute),API Key 由平台按工作空间管理。
铁律 1 — 相对时间必须用 NOW(),禁止硬编码日期
"上月""上周""本年""昨天""近N天""去年""本季""上季" → 必须 NOW()。
铁律 2 — metricDefinitions 中每个 key 必须同时在 metrics 数组中(包括辅助指标) 定义了就必须注册。辅助计算指标也必须显式列为 metric。
铁律 3 — 占比/排名 + filters = 分母/范围被缩小 → 结果恒 100%/恒为 1
要"某个值在全局中的占比/排名" → 用 resultFilters 做展示筛选, 不用 filters。
铁律 4 — "同比"默认 = yoy;带粒度前缀时按前缀选择
yoymom;"周同比" → wow;"季同比" → qoq铁律 5 — 一个指标只能做一次快速计算,不可链式叠加 需要多步(如先算环比再排名)→ 用 metricDefinitions 分步。
铁律 6 — MetricMatches 只能在 metricDefinitions 的 filters 中使用 禁止放在顶层 filters。
铁律 7 — 派生指标的 metric_time 粒度限制必须遵守 标注"仅支持日粒度"的派生指标只能在 timeConstraint 锚定到天粒度时使用。
铁律 8 — "月变化趋势"中的占比/排名范围维度必须是 metric_time__month
铁律 9 — 上下文不足时必须拒绝生成查询,返回空 JSON {}
同环比: {指标}__sameperiod__{偏移粒度}__{方法}
dod, wow, mom, qoq, yoy, moeom, qoeoq, yoeoyvalue, growthvalue, growth, decrease, decreaserate占比: {指标}__proportion__{范围维度}
proportion__ = 全局占比; proportion__dim_A = 组内占比排名: {指标}__{方式}__{顺序}__{范围维度}
rank / rankDense / rowNumber;顺序: desc / asc时间限定: {指标}__period__{限定}
7d, 3w, 6m, 2q, 1yytd, qtd, mtd, wtd属性说明refMetric引用已有指标expr复合表达式 "[m1]+[m2]"``period时间限定(仅支持相对偏移)preAggs时间维度多层聚合( 数组格式 [{...}])filters业务限定(支持 MetricMatches)indirections衍生方式(同环比/占比/排名/多层聚合)specifyDimension聚合维度控制(EXCLUDE)
用户说timeConstraint昨天"['metric_time__day']= DATEADD(DateTrunc(NOW(), \"DAY\"), -1, \"DAY\")"今天"['metric_time__day']= DateTrunc(NOW(), \"DAY\")"上周"DateTrunc(['metric_time'], \"WEEK\") = DATEADD(DateTrunc(NOW(), \"WEEK\"), -1, \"WEEK\")"本周"DateTrunc(['metric_time'], \"WEEK\") = DateTrunc(NOW(), \"WEEK\")"上月"DateTrunc(['metric_time'], \"MONTH\") = DATEADD(DateTrunc(NOW(), \"MONTH\"), -1, \"MONTH\")"本月"DateTrunc(['metric_time'], \"MONTH\") = DateTrunc(NOW(), \"MONTH\")"上季"DateTrunc(['metric_time'], \"QUARTER\") = DATEADD(DateTrunc(NOW(), \"QUARTER\"), -1, \"QUARTER\")"本年"DateTrunc(['metric_time'], \"YEAR\") = DateTrunc(NOW(), \"YEAR\")"去年"DateTrunc(['metric_time'], \"YEAR\") = DATEADD(DateTrunc(NOW(), \"YEAR\"), -1, \"YEAR\")"近7天"DateTrunc(['metric_time'], \"DAY\") >= DATEADD(DateTrunc(NOW(), \"DAY\"), -7, \"DAY\") AND ['metric_time__day'] < DateTrunc(NOW(), \"DAY\")"近30天"DateTrunc(['metric_time'], \"DAY\") >= DATEADD(DateTrunc(NOW(), \"DAY\"), -30, \"DAY\") AND ['metric_time__day'] < DateTrunc(NOW(), \"DAY\")"近12个月"DateTrunc(['metric_time'], \"MONTH\") >= DATEADD(DateTrunc(NOW(), \"MONTH\"), -12, \"MONTH\") AND DateTrunc(['metric_time'], \"MONTH\") < DateTrunc(NOW(), \"MONTH\")"
DateTrunc('YYYY-MM-DD', ...)metric__sameperiod__mom__growth__rank__desc__dimproportion__metric_time__DAY 导致报错根据查询结果类型推荐最佳图表类型:
数据类型推荐图表ECharts 类型时间序列(单维度+时间)折线图line时间序列(多指标)面积图area维度对比(少类别)柱状图bar占比数据饼图pie双变量关系散点图scatter排名数据排行榜表格table汇总数值指标卡metric_card
支持以下操作:
/api/v1/workspaces/{id}/dashboards/api/v1/workspaces/{id}/dashboards/{db_id}/chartsrefresh_interval 秒数,0 表示不自动刷新/:workspaceSlug/dashboards/:id/full/api/v1/workspaces/{id}/gateway/config 配置)admin(管理员)/ editor(编辑者)/ viewer(查看者)