import streamlit as st import pandas as pd import plotly.express as px st.title("📊 DASHBOARD KPI MONITORING DAILY") # Upload CSV uploaded = st.file_uploader("Upload KPI CSV", type=["csv"]) if uploaded: df = pd.read_csv(uploaded) df["DATE_ID"] = pd.to_datetime(df["DATE_ID"]) # ======================== # FILTER SECTION # ======================== st.subheader("Filter") site_filter = st.multiselect( "Site ID", df["SITE_ID"].unique(), default=df["SITE_ID"].unique() ) band_filter = st.multiselect( "Band", df["BAND"].unique(), default=df["BAND"].unique() ) start_date = st.date_input("Start Date", df["DATE_ID"].min()) end_date = st.date_input("End Date", df["DATE_ID"].max()) # Apply filter df_filtered = df[ (df["SITE_ID"].isin(site_filter)) & (df["BAND"].isin(band_filter)) & (df["DATE_ID"].between(pd.to_datetime(start_date), pd.to_datetime(end_date))) ] # ======================== # KPI CHART PER SECTOR # ======================== sectors = df_filtered["SECTOR"].unique() st.subheader("Availability") cols = st.columns(len(sectors)) for i, sector in enumerate(sectors): sector_data = df_filtered[df_filtered["SECTOR"] == sector] fig = px.line( sector_data, x="DATE_ID", y="Availability", title=f"Availability - {sector}" ) cols[i].plotly_chart(fig, use_container_width=True) # ======================== # SESSION ABNORMAL # ======================== st.subheader("Session Abnormal Release") cols2 = st.columns(len(sectors)) for i, sector in enumerate(sectors): sector_data = df_filtered[df_filtered["SECTOR"] == sector] fig = px.line( sector_data, x="DATE_ID", y="Session_Abnormal", title=f"Session Abnormal - {sector}" ) cols2[i].plotly_chart(fig, use_container_width=True)