diff --git a/dashboard.py b/dashboard.py index 378b77f..82200c6 100644 --- a/dashboard.py +++ b/dashboard.py @@ -26,6 +26,16 @@ st.set_page_config( initial_sidebar_state="expanded", ) +import streamlit.components.v1 as components +components.html(""" + +""", height=0) + _STRATEGY_LABELS = { "LOWEST_COST_WITHOUT_CAP": "Menor coste", "LOWEST_COST_WITH_BID_CAP": "Cap. puja", @@ -497,23 +507,35 @@ with tab5: df_all["score"] = pd.to_numeric(df_all.get("score", 0), errors="coerce").fillna(0) df_all["created_at"] = df_all.get("created_at", pd.Series(dtype=str)) + # Map campaign_id → campaign_name using already-loaded Meta data + camp_id_to_name = {cid: m["name"] for cid, m in campaign_metrics.items()} + df_all["campaign_name"] = df_all["campaign_id"].map( + lambda cid: camp_id_to_name.get(str(cid), str(cid)) + ) + df_all["vertical"] = df_all["campaign_name"].map(_extract_vertical) + # ── Filters ─────────────────────────────────────────────────────────────── - f1, f2, f3 = st.columns([2, 2, 2]) + f1, f2, f3, f4 = st.columns([2, 2, 2, 2]) dates_available = sorted(df_all["created_at"].dropna().unique(), reverse=True) sel_date = f1.selectbox("Fecha análisis", dates_available) - camp_ids = sorted(df_all["campaign_id"].dropna().unique().tolist()) if "campaign_id" in df_all.columns else [] - sel_camp = f2.selectbox("Campaña", ["Todas"] + camp_ids) + verts_available = sorted(df_all["vertical"].dropna().unique().tolist()) + sel_vert_cr = f2.selectbox("Vertical", ["Todas"] + verts_available, key="cr_vert") - score_min = f3.slider("Score mínimo", 0.0, 10.0, 0.0, step=0.5) + camp_names = sorted(df_all["campaign_name"].dropna().unique().tolist()) + sel_camp = f3.selectbox("Campaña", ["Todas"] + camp_names, key="cr_camp") + + score_min = f4.slider("Score mínimo", 0.0, 10.0, 0.0, step=0.5) # Apply filters df = df_all.copy() if sel_date: df = df[df["created_at"] == sel_date] - if sel_camp != "Todas" and "campaign_id" in df.columns: - df = df[df["campaign_id"] == sel_camp] + if sel_vert_cr != "Todas": + df = df[df["vertical"] == sel_vert_cr] + if sel_camp != "Todas": + df = df[df["campaign_name"] == sel_camp] if score_min > 0: df = df[df["score"] >= score_min] @@ -540,12 +562,11 @@ with tab5: # ── Table + Detail panel ────────────────────────────────────────────────── rename_map = { - "campaign_id": "Campaña ID", + "campaign_name": "Campaña", + "vertical": "Vertical", "ad_name": "Anuncio", "score": "Score", "created_at": "Fecha", - "analysis": "Análisis", - "recommendations": "Recomendaciones", } display_cols = [c for c in rename_map if c in df.columns] df_display = df[display_cols].rename(columns=rename_map).reset_index(drop=True)