Initial commit
Made-with: Cursor
This commit is contained in:
69
db/views/R__vw_audit_summary.sql
Normal file
69
db/views/R__vw_audit_summary.sql
Normal file
@@ -0,0 +1,69 @@
|
||||
-- =============================================================
|
||||
-- R__vw_audit_summary.sql
|
||||
-- EMS Platform – přehledové views pro audit a dashboard
|
||||
-- Repeatable migration
|
||||
-- =============================================================
|
||||
|
||||
-- Denní souhrn per lokalita
|
||||
CREATE OR REPLACE VIEW ems.vw_audit_daily AS
|
||||
SELECT
|
||||
site_id,
|
||||
date_trunc('day', interval_start AT TIME ZONE 'Europe/Prague') AS day_local,
|
||||
COUNT(*) AS interval_count,
|
||||
-- Energie (kWh = W × 15min / 60 = W / 4 / 1000)
|
||||
ROUND(SUM(GREATEST(actual_grid_power_w, 0))::NUMERIC / 4000, 3) AS import_kwh,
|
||||
ROUND(SUM(ABS(LEAST(actual_grid_power_w, 0)))::NUMERIC / 4000, 3) AS export_kwh,
|
||||
ROUND(SUM(GREATEST(actual_pv_power_w, 0))::NUMERIC / 4000, 3) AS pv_kwh,
|
||||
ROUND(SUM(GREATEST(actual_load_power_w, 0))::NUMERIC / 4000, 3) AS load_kwh,
|
||||
ROUND(SUM(GREATEST(actual_ev_power_w, 0))::NUMERIC / 4000, 3) AS ev_kwh,
|
||||
ROUND(SUM(GREATEST(actual_heat_pump_power_w, 0))::NUMERIC / 4000, 3) AS hp_kwh,
|
||||
-- Náklady
|
||||
ROUND(SUM(actual_cost_czk), 2) AS actual_cost_czk,
|
||||
ROUND(SUM(deviation_cost_czk), 2) AS total_deviation_czk,
|
||||
-- Počet intervalů s velkými odchylkami (>1kW)
|
||||
COUNT(*) FILTER (WHERE ABS(deviation_grid_w) > 1000) AS high_deviation_count
|
||||
FROM ems.audit_interval
|
||||
GROUP BY site_id, date_trunc('day', interval_start AT TIME ZONE 'Europe/Prague');
|
||||
|
||||
COMMENT ON VIEW ems.vw_audit_daily IS
|
||||
'Denní souhrn auditu per lokalita. Energie v kWh, náklady v Kč.
|
||||
Používat pro dashboard denního přehledu a reporty.';
|
||||
|
||||
-- ============================================================
|
||||
|
||||
-- Týdenní souhrn
|
||||
CREATE OR REPLACE VIEW ems.vw_audit_weekly AS
|
||||
SELECT
|
||||
site_id,
|
||||
date_trunc('week', interval_start AT TIME ZONE 'Europe/Prague') AS week_local,
|
||||
ROUND(SUM(GREATEST(actual_grid_power_w, 0))::NUMERIC / 4000, 1) AS import_kwh,
|
||||
ROUND(SUM(ABS(LEAST(actual_grid_power_w, 0)))::NUMERIC / 4000, 1) AS export_kwh,
|
||||
ROUND(SUM(GREATEST(actual_pv_power_w, 0))::NUMERIC / 4000, 1) AS pv_kwh,
|
||||
ROUND(SUM(actual_cost_czk), 0) AS actual_cost_czk
|
||||
FROM ems.audit_interval
|
||||
GROUP BY site_id, date_trunc('week', interval_start AT TIME ZONE 'Europe/Prague');
|
||||
|
||||
COMMENT ON VIEW ems.vw_audit_weekly IS
|
||||
'Týdenní souhrn auditu per lokalita.';
|
||||
|
||||
-- ============================================================
|
||||
|
||||
-- Aktuální den – hourly breakdown pro dashboard graf
|
||||
CREATE OR REPLACE VIEW ems.vw_audit_today_hourly AS
|
||||
SELECT
|
||||
site_id,
|
||||
date_trunc('hour', interval_start AT TIME ZONE 'Europe/Prague') AS hour_local,
|
||||
ROUND(AVG(actual_pv_power_w)::NUMERIC / 1000, 2) AS avg_pv_kw,
|
||||
ROUND(AVG(actual_battery_power_w)::NUMERIC / 1000, 2) AS avg_battery_kw,
|
||||
ROUND(AVG(actual_grid_power_w)::NUMERIC / 1000, 2) AS avg_grid_kw,
|
||||
ROUND(AVG(actual_load_power_w)::NUMERIC / 1000, 2) AS avg_load_kw,
|
||||
ROUND(AVG(actual_battery_soc_pct), 1) AS avg_soc_pct,
|
||||
ROUND(SUM(actual_cost_czk), 2) AS cost_czk
|
||||
FROM ems.audit_interval
|
||||
WHERE interval_start >= date_trunc('day', now() AT TIME ZONE 'Europe/Prague')
|
||||
AND interval_start < date_trunc('day', now() AT TIME ZONE 'Europe/Prague') + INTERVAL '1 day'
|
||||
GROUP BY site_id, date_trunc('hour', interval_start AT TIME ZONE 'Europe/Prague')
|
||||
ORDER BY hour_local;
|
||||
|
||||
COMMENT ON VIEW ems.vw_audit_today_hourly IS
|
||||
'Hodinový přehled dnešního dne pro dashboard graf výkonů a nákladů.';
|
||||
Reference in New Issue
Block a user