X-SCADA AI > Database SQL을 활용한 Cartesian Product(카티션 곱) 활용
X-SCADA AI에서 Cartesian Product(카티션 곱, 데카르트 곱, 곱집합)을 활용하여 데이터의 소계, 총계 등을 표현할 수 있는 샘플을 준비했습니다.
다양한 방식으로 통계적인 표현이 가능하겠지만, 이번 샘플에서는 DB SQL만을 활용하여 표현할 수 있도록 했습니다.
샘플은 X-SCADA AI 최신 버전과 SQLite 데이터베이스를 활용하였습니다.
1. 데이터베이스 생성 및 설정하기
1) SQLite 데이터베이스 파일을 생성한다.
· 쉬운 접근 및 사용이 가능하도록 DB Browser for SQLite 툴을 활용했습니다. (해당 툴 사이트 이동(클릭시 이동))
2) 아래와 같이 테이블은 생성한다.
· power 테이블 : 소계(Sub Total), 합계(Total)에 사용할 원본 데이터를 저장할 테이블
3) 추가로 테이블을 1개 더 생성한다.
· T_COPY : 데이터 복사에 사용할 테이블
4) 빠른 데이터 삽입을 위해 첨부한 csv 파일을 활용하여 power 테이블에 데이터를 삽입한다.
· DB Browser for SQLite 기준, 상단 File > Import > Table from CSV file… 클릭
5) 생성된 팝업창에서 Table name을 power로 변경한 뒤 [확인(OK)]을 클릭한다.
6) SQL 실행(Execute SQL) 창에서 아래와 같이 SQL 입력 후 실행(F5)시킨다.
INSERT INTO T_COPY VALUES (1), (2), (3); |
2. X-SCADA AI Designer 설정하기
1) X-SCADA AI Designer > 데이터 소스(Data Sources) 에서 마우스 오른쪽 클릭 후 SQLite 추가(Add SQLite)를 클릭한 뒤 준비한 DB 파일을 추가한다.
· 현재 따라하기에서는 첨부한 파일 중 sample 파일을 다운로드 받아 활용했습니다.
2) 추가한 sqlite_1을 마우스 오른쪽 클릭한 뒤 SELECT SQL 추가(Add SELECT SQL)한 뒤 아래와 같이 SQL을 작성한다.
SELECT DATETIME(DATETIME) AS DATETIME ,DEPT ,FLOOR ,VALUE FROM POWER |
3) sqlite_1을 한번 더 마우스 오른쪽 클릭한 뒤 SELECT SQL을 1개 더 생성한 뒤 아래와 같이 SQL을 작성한다.
SELECT A.DEPT ,A.FLOOR ,SUM(A.VALUE) AS VALUE FROM ( SELECT B.IDX ,CASE WHEN B.IDX < 3 THEN A.DEPT ELSE '[Total]' END AS DEPT ,CASE WHEN B.IDX = 1 THEN A.FLOOR WHEN B.IDX = 2 THEN '[Sub Total]' ELSE ' ' END AS FLOOR ,A.VALUE FROM POWER A, T_COPY B WHERE 1=1 AND B.IDX < 4 ) A GROUP BY A.DEPT , A.FLOOR |
4) X-SCADA AI Designer > 디자인 화면에서 리스트뷰(ListView), 텍스트(Text) 등을 활용하여 작화한다.
5) 원시 데이터(Source Data) 항목의 리스트뷰(ListView)를 선택한 뒤 속성(Properties) > 바인딩(Binding) > 바인딩 조회 SQL(BindSelectSQL)에 sqlite_1.query_1을 바인딩한다.
· Binding SQL 이름 규칙 : DB명.SQL명 (sqlite_1.query_1, sqlite_1 폴더에 있는 query_1이라는 뜻 / 이름 사이에 점(.)으로 구분)
6) 속성(Properties) > 리스트뷰(ListView) > 열 설정(Columns)에서 4개의 열(Column)을 추가한 뒤 바인딩 필드(Binding Field) 등을 설정한다.
· Column 1 > Binding Field : DATETIME / Name : Time (시간)
· Column 2 > Binding Field : DEPT / Name : Building (건물)
· Column 3 > Binding Field : FLOOR / Name : Floor (층)
· Column 4 > Binding Field : VALUE / Name : Usage (사용량)
7) 결과 데이터(Result Data)에 있는 리스트뷰(ListView)도 마찬가지로 뒤 속성(Properties) > 바인딩(Binding) > 바인딩 조회 SQL(BindSelectSQL)에 sqlite_1.query_2를 바인딩한다.
8) 속성(Properties) > 리스트뷰(ListView) > 열 설정(Columns)에서 3개의 열(Column)을 추가한 뒤 바인딩 필드(Binding Field) 등을 설정한다.
· Column 1 > Binding Field : DEPT / Name : Building (건물)
· Column 2 > Binding Field : FLOOR / Name : Floor (층)
· Column 3 > Binding Field : VALUE / Name : Usage (사용량)
2. X-SCADA AI Viewer 설정하기
1) 프로젝트 저장 후 X-SCADA AI Viewer로 실행한 뒤 Result Data 항목에서 데이터 합을 잘 표현하는지 확인한다.
· 각 층(Floor) 별로 사용량 합계를 잘 표현하는지 확인한다.
· 건물(Building) 별로 소계(Sub Total)를 잘 표현하는지 확인한다.
· 총합계(Total)를 잘 표현하는지 확인한다.
2) 첨부한 파일들을 다운로드 받아 직접 따라하거나 실행하여 설정을 확인할 수 있다.