계측 데이터와 집계
집계 구조
원시 1분 데이터를 화면에서 직접 합치면 느리고, 날짜 경계가 흔들리고, 화면마다 숫자가 달라집니다. 에너지 플랫폼은 집계 테이블을 단계별로 쌓고, 화면과 보고서는 집계만 읽는 구조를 씁니다.
1. 집계 계층
원시 (power_measurement) 1분, 계기별
└─ 15분 (power_measurement_15min) 수요전력, 요금 구간, 그룹 집계
└─ 계기 기본 (power_measurement_base) 계기별 기간 집계 + 품질 지표
└─ 시간 (power_measurement_usage_hour) 그룹별 시간 사용량, 시간대 요금
└─ 구역 기본 (*_plant_area_base) 구역/그룹 기간 집계, 순위, 탄소
└─ 요약 (power_measurement_summary) DAY / WEEK / MONTH / YEAR
| 단계 | 목적 | 주 사용처 |
|---|---|---|
| 원시 | 원본 보존 | 재집계, 실시간 차트 |
| 15분 | 한전 수요전력 단위 | 피크 알람, 요금 구간 배분 |
| 계기 기본 | 계기별 사용량과 전기 품질 | 계기 상세, 품질 분석 |
| 시간 | 시간대별 요금, 기준선 | 요금, 절감 계산 |
| 구역 기본 | 계층 집계, 순위 | 대시보드, 랭킹 |
| 요약 | 기간 합계 | 보고서, 추이 차트 |
유량, 분진, 소음, PID, SCR도 같은 패턴(*_measurement_base, *_usage_hour, *_plant_area_base, *_summary)을 따릅니다. 도메인이 늘어도 집계 구조는 같아서 화면과 보고서를 재사용할 수 있습니다.
2. 공통 집계 키
| 항목 | 값 | 설명 |
|---|---|---|
| period | DAY / WEEK / MONTH / YEAR | 집계 주기 |
| grp_type | COMPANY / PLANT / PLANT_AREA / ASSET / METER | 어느 계층의 합계인가 |
| grp_id | 해당 계층 PK | 공장 3번, 계기 12번 |
| grp_code, grp_name | 표시용 | 조인 없이 화면 표시 |
| parent_id | 상위 집계 행 | 계층 드릴다운 |
| measured_at | 구간 시작 시각 | 일 집계면 해당일 0시 |
grp_code, grp_name을 집계 행에 같이 저장하면 보고서처럼 무거운 조회에서 마스터 조인을 줄일 수 있습니다. 대신 이름 변경 시 과거 행은 옛 이름으로 남는다는 점을 감안해야 합니다.
3. 전력 집계 주요 지표
| 컬럼 | 의미 |
|---|---|
| kWh | 사용량 (적산 차분) |
| kWhFirst, kWhLast | 구간 첫/마지막 적산값. 검증과 재계산 근거 |
| Pavg, Pmax, PmaxTime | 평균/최대 전력, 최대 시각 |
| demandPower | 수요전력 (15분 기준) |
| PmaxExcess, PmaxExcessRate | 목표 피크 초과량, 초과율 |
| lf, rlf | 부하율 |
| llKWh, mlKWh, plKWh | 경부하/중간/최대부하 사용량 |
| llRate, mlRate, plRate, baseRate | 시간대 단가, 기본요금 단가 |
| cKWh | 요금 환산값 |
| usageRatio | 상위 대비 사용 비율 |
| tCO2 | 탄소 배출량 |
| meterRank | 사용량 순위 |
| recordsCnt, expectedRecordsCnt | 실제/기대 수집 건수 (결측률) |
| boundaryOk, aggStatus | 경계 데이터 확보 여부, 집계 상태 |
계기 기본 테이블에는 전압 불평형(vur), 전류 불평형(cur), 전압 THD(vthd), 주파수 편차, 역률(pf) 같은 전기 품질 지표도 같이 담습니다.
4. 15분 집계
15분 집계는 세 가지 일을 합니다.
- 피크: 그룹별 15분 수요전력(Pmax/Pavg)을 구하고 목표 피크와 비교해 알람 평가
- 요금: 계기별 15분 소비량을 계절·시간대 요금 구간에 배분
- 그룹: 계기 데이터를 회사/사업장/구역/공정/유틸리티/설비 단위로 합산
15분 단위로 시간대를 판정해 두면 시간대 경계(예: 10:00)에 걸친 사용량도 정확히 나눌 수 있습니다.
5. 품질 지표를 집계에 담는 이유
recordsCnt = 1380, expectedRecordsCnt = 1440 → 결측률 4.2%
boundaryOk = false → 구간 시작/끝 적산값 누락, 사용량 신뢰 낮음
- 결측이 있어도 숫자는 나옵니다. 그 숫자를 믿어도 되는지 알려주는 것이 품질 지표입니다
- 화면에서 결측률이 높은 날을 흐리게 표시하거나 경고 아이콘을 붙입니다
- 보고서에는 결측률 상위 계기 목록을 부록으로 넣습니다
6. 기간 경계
- 하루 컷 시각을 고정합니다 (보통 00:00 KST)
- 주/월/연 시작 기준은 회사별 기간 정책(
company_period_policy)을 따릅니다 - 구간은
[start, end)반열린 구간으로 통일합니다 - 일 사용량은 "당일 00:00 적산 - 익일 00:00 적산"입니다. 익일 00:00 값이 들어와야 확정됩니다
7. 재집계
수집이 늦거나 결측이 나중에 채워지면 이미 만든 집계를 다시 계산해야 합니다.
1. 원시 데이터 늦게 도착 or 수동 정정
2. 해당 계기·구간을 재집계 대상으로 등록
3. 필터: 이미 확정된 기간, 잠긴 기준선 기간 등 제외 규칙 적용
4. 15분 → 계기 기본 → 시간 → 구역 → 요약 순서로 재계산
5. 상위 그룹(구역, 사업장, 회사)까지 전파
- 집계 잡은 멱등해야 합니다. 같은 구간을 두 번 돌려도 결과가 같아야 합니다
- 수집과 집계는 분리합니다. 수집이 멈춰도 집계는 나중에 따라잡을 수 있어야 합니다
- 재집계 범위가 커지면 DB 부하가 크니 야간에 분할 실행합니다
8. 스케줄링
| 작업 | 주기 | 비고 |
|---|---|---|
| 수집 | 1분 등 | 수집기별 polling_interval |
| 15분 집계 | 15분 | 경계 + 지연 여유 |
| 시간 집계 | 1시간 | 정시 + 수 분 |
| 일 집계 | 1일 | 00:00 이후, 늦은 데이터 여유 |
| 주/월/연 요약 | 기간 경계 | 회사 기간 정책 기준 |
| 계기 상태 | 수 분 | 마지막 수신 시각으로 on/off 판정 |
경계 시각 정각에 돌리지 말고 지연 여유(cutoff)를 둡니다. 09:00 집계를 09:00:00에 돌리면 08:59 데이터가 아직 안 들어왔을 수 있습니다.
9. 자주 하는 실수
- 순시 kW를 평균 내서 kWh를 만드는 것 (적산 차분이 정답)
- 상위 그룹을 하위 그룹 합산과 대표 계기로 섞어서 계산
- 서버 UTC, 현장 KST로 일 경계가 9시간 밀림
- 주 시작 요일을 화면과 배치가 다르게 해석
- 재집계 시 상위 그룹 전파 누락