From ef83842af22d29949df61987f594c93a8e01754f Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 22 Jul 2026 16:53:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=94=A8=E6=88=B7=E6=8E=92=E8=A1=8CJOIN?= =?UTF-8?q?=20users.username,=E4=BE=9B=E5=BA=94=E5=95=86=E6=8E=92=E8=A1=8C?= =?UTF-8?q?JOIN=20llmprovider.name?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sage_datamart/dashboards.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/sage_datamart/dashboards.py b/sage_datamart/dashboards.py index 4309f81..7dcf6a7 100644 --- a/sage_datamart/dashboards.py +++ b/sage_datamart/dashboards.py @@ -246,20 +246,26 @@ async def get_top_models(env, sor, limit=5): async def get_top_providers(env, sor, limit=5): """Top N 供应商(按金额,全量)""" - sql = """SELECT providerid, COUNT(*) as cnt, COALESCE(SUM(amount_cny), 0) as total_amount - FROM dm_model_call_fact WHERE providerid IS NOT NULL - GROUP BY providerid ORDER BY total_amount DESC LIMIT ${limit}$""" + sql = """SELECT f.providerid, COUNT(*) as cnt, COALESCE(SUM(f.amount_cny), 0) as total_amount, + COALESCE(p.name, f.providerid) as provider_name + FROM dm_model_call_fact f + LEFT JOIN llmprovider p ON p.id = f.providerid + WHERE f.providerid IS NOT NULL + GROUP BY f.providerid ORDER BY total_amount DESC LIMIT ${limit}$""" recs = await sor.sqlExe(sql, {'limit': limit}) - return [{'provider_name': r.providerid or 'Unknown', 'cnt': int(r.cnt), - 'total_amount': round(float(r.total_amount), 2)} for r in recs] + return [{'provider_name': r.provider_name or r.providerid or 'Unknown', + 'cnt': int(r.cnt), 'total_amount': round(float(r.total_amount), 2)} for r in recs] async def get_top_users(env, sor, limit=5): """全量 Top N 用户(按金额)""" - sql = """SELECT userid, COUNT(*) as cnt, COALESCE(SUM(amount_cny), 0) as total_amount - FROM dm_model_call_fact GROUP BY userid ORDER BY total_amount DESC LIMIT ${limit}$""" + sql = """SELECT f.userid, COUNT(*) as cnt, COALESCE(SUM(f.amount_cny), 0) as total_amount, + COALESCE(u.username, f.userid) as user_name + FROM dm_model_call_fact f + LEFT JOIN users u ON u.id = f.userid + GROUP BY f.userid ORDER BY total_amount DESC LIMIT ${limit}$""" recs = await sor.sqlExe(sql, {'limit': limit}) - return [{'user_name': r.userid, 'cnt': int(r.cnt), + return [{'user_name': r.user_name or r.userid, 'cnt': int(r.cnt), 'total_amount': round(float(r.total_amount), 2)} for r in recs]