온톨로지 AI 중복 집계: 관계를 연결하자 주문 합계가 늘어나는 이유
온톨로지 AI가 주문·품목 관계를 연결한 뒤 합계를 부풀리는 이유와 검수 방법을 정리합니다. 가상 표본으로 조인 전후 결과, 값 DISTINCT의 한계와 기준 키별 집계 인수 조건을 확인하세요.
이 글을 쓴 알파카랩스카카오·네이버·쿠팡 출신, 재하청 0%, 대기업·공공기관 등 18개사+ 레퍼런스
온톨로지 AI의 주문 합계는 주문 키별로 한 번만 더합니다. 2026-10-24 기준, 금액의 중복 제거만으로 조인 오류를 고치지 못합니다.
주문 원장에서는 맞던 합계가 품목이나 납품 관계를 연결한 뒤 달라질 수 있습니다. 질의는 오류 없이 실행되고 각 행의 값도 맞는데 합계만 부풀어 오릅니다. 같은 주문 금액이 여러 관계 행에 반복되는 경우를 가상 표본과 인수표로 확인해 보겠습니다.
주문 합계는 어떤 단위로 한 번씩 더하나요?#
주문 전체 금액을 묻는다면 주문 키가 집계의 기준입니다. 주문에 연결된 품목 행이 늘어도 동일 범위의 주문 전체 금액은 그대로여야 합니다. 품목 행의 금액을 합산하는 질문은 별도 지표로 정의합니다.
현업 책임자는 ‘주문 금액’이 뜻하는 값과 포함할 주문을 정하세요. 데이터 담당자는 키의 유일성과 관계를, 구현 담당자는 실제 질의의 집계 단위를 확인합니다. 원천 정비가 목적이라면 개체를 지우기 전에 정상적인 일대다 관계에서 생긴 반복인지부터 구별해야 합니다.
Google Cloud의 Looker symmetric aggregates 공식 설명은 주문과 품목을 연결할 때 주문 금액이 반복되는 예를 보여줍니다. Looker의 보정 기능도 고유한 기본키와 올바르게 선언한 조인 관계에 의존한다고 명시합니다. 이 문서는 2025년 7월 22일 갱신됐으며 2026년 10월 24일 확인했습니다. 모든 온톨로지나 질의 도구가 자동으로 보정한다는 설명은 아닙니다.
정상적인 품목 행이 어떻게 주문 합계를 부풀리나요?#
한 주문이 여러 품목과 연결되면 조인 결과에 주문 금액이 반복됩니다. 품목은 서로 다른 정상 행이므로 원천에서 삭제할 중복 자료로 취급하면 안 됩니다. 합산할 지표가 어느 개체의 값인지 확인해야 합니다.
다음은 2026년 10월 24일 작성한 자사 가상 계산 예시입니다. A와 B는 서로 다른 유효 주문이며 같은 조회 범위·기간·통화를 가정합니다. 원천에는 각 주문 키에 금액이 한 번씩 기록돼 있고 품목 행은 모두 해당 주문에 정상 연결돼 있습니다. 실제 거래나 고객의 측정 결과가 아닙니다.
| 가상 주문 키 | 주문 전체 금액 | 연결된 품목 행 |
|---|---|---|
| 주문 A | 10,000원 | 서로 다른 품목 행 2개 |
| 주문 B | 10,000원 | 서로 다른 품목 행 3개 |
원천 주문 합계는 10,000원 + 10,000원 = 20,000원입니다. 주문과 품목을 연결한 결과는 5행이고, 주문 전체 금액을 그대로 더하면 10,000원 × 2 + 10,000원 × 3 = 50,000원이 됩니다. 연결된 품목 행 수가 금액의 반복 횟수가 된 것입니다.
이런 관계 증식을 fan-out이라고 부릅니다. 서로 다른 주문을 하나의 개체로 병합하는 문제가 아니므로 온톨로지 엔터티 해소와 구별해야 합니다. 박스·낱개와 환산 표시 합계를 구분하는 문제는 온톨로지 단위 환산 검수에서 별도로 다룹니다.
금액에 DISTINCT를 붙이면 해결되지 않나요?#
같은 금액인 서로 다른 주문까지 하나로 합쳐 버릴 수 있습니다. 단순한 SUM(DISTINCT 금액)은 주문 키가 다른지 구분하지 않습니다. 앞의 A와 B도 금액만 보면 같은 값입니다.
PostgreSQL 18 집계 표현식 공식 문서는 DISTINCT가 입력 표현식의 서로 다른 값에 적용된다고 설명합니다. 금액만 입력하면 금액의 값이 제거 기준이 됩니다. 이 문서는 게시일을 별도로 표시하지 않으며 2026년 10월 24일 확인했습니다.
| 같은 표본의 계산 방식 | 결과 | 판정 이유 |
|---|---|---|
| 조인 결과의 주문 금액을 단순 SUM | 50,000원 | 품목 행마다 부모 금액을 반복 합산한 오답 |
| SUM(DISTINCT 주문 금액) | 10,000원 | 금액이 같은 서로 다른 주문을 합친 오답 |
| 승인 대상 주문 키별 금액을 한 번씩 합산 | 20,000원 | A와 B의 원천 금액을 각각 한 번 반영 |
주문 수에 COUNT(DISTINCT 주문 키)를 써서 2건이 나와도 금액 계산까지 고쳐지지는 않습니다. 건수와 합계는 서로 다른 지표입니다. Looker의 symmetric aggregates가 키를 반영해 DISTINCT 연산을 활용하는 것과 금액 값에만 DISTINCT를 붙이는 단축 처방도 구별하세요.
관계를 따라 계산할 때 무엇을 먼저 정하나요?#
질문의 의미와 허용된 필터로 대상 키를 정한 뒤 지표의 기준 단위로 계산합니다. ‘특정 품목이 포함된 주문의 전체 금액’과 ‘그 품목 행의 금액’은 다른 질문입니다. 조인 전에 무조건 전체 합계를 만들면 관련 없는 주문까지 포함할 수 있습니다.
주문 전체 금액이 목적이면 조건에 맞는 주문 키 목록을 만든 뒤 원천의 주문별 금액을 한 번씩 합산하는 경로를 검토합니다. 품목이나 납품 지표도 필요하면 각각의 기준 단위에서 집계한 결과를 연결합니다. 여러 자식 목록을 펼친 뒤 부모와 자식의 지표를 한꺼번에 더하는 방식을 그대로 인수하지 마세요. 이는 자사 제안 설계이며 모든 질의에 적용할 단일 구현은 아닙니다.
같은 주문 키에 서로 다른 주문 금액이 있다면 먼저 충돌을 해결해야 합니다. MAX·MIN이나 처음 읽힌 값으로 고정해 합계를 맞추지 않습니다. 키의 유일성, 원천 버전과 지표의 정의를 확인하고 검수 전에는 확정 합계를 보류합니다.
온톨로지에는 주문·품목·납품의 관계와 지표가 속한 개체를 정의할 수 있습니다. 실제 계산이 그 정의를 따르는지는 질의와 키별 결과로 검수해야 합니다. 출처 설명이나 자연어 답변이 그럴듯하다는 이유로 숫자까지 맞다고 판단하지 않습니다.
발주자는 어떤 반례로 AI 집계를 인수하나요?#
같은 금액의 다른 주문과 서로 다른 수의 자식 행을 함께 넣어 검사합니다. 결과 금액뿐 아니라 포함된 주문 키와 키별 기여 금액을 대조하세요. 아래는 앞의 가상 표본을 확장해 적용할 자사 제안 인수표이며 실제 고객의 검증 성과가 아닙니다.
| 검수 표본·변경 | 기대 동작 | 남길 증거 |
|---|---|---|
| A/B는 같은 금액, 품목 행 수는 다름 | 주문 전체 금액은 20,000원 | 원천 주문 키·금액, 조인 전후 행과 키별 기여액 |
| 대상 주문·금액은 유지하고 자식 관계만 추가 | 동일 범위의 주문 전체 합계는 유지 | 관계 경로·자식 수 변경 전후의 같은 지표 비교 |
| 같은 주문 키에 금액 충돌 | 임의 선택 없이 검수 보류 | 키 유일성·원천/버전 충돌·승인된 정정 근거 |
| 특정 품목 조건으로 질문 변경 | 주문 전체 금액과 품목 행 금액을 구분 | 질문 정의·대상 키·필터·지표 계산식 |
| 같은 주문이 여러 태그/분류에 포함 | 중복 귀속 소계를 전체 합계로 재가산하지 않음 | 전체 기준 키 집합과 분류별 집합 또는 합의한 배분 규칙 |
| 권한 밖 주문 또는 불완전한 실행 | 허용 범위만 계산하고 전체 합계 선언 보류 | 현재 권한·실행 완료·누락/제외 상태·응답 범위 |
분류가 겹치는 소계는 더해도 전체 합계와 일치하지 않을 수 있습니다. 전체는 전체의 승인된 주문 키로 계산하거나 합의한 배분 기준을 써야 합니다. 서로 다른 통화의 합산, 할인·세금의 품목별 배분이나 매출 인식은 별도 지표 정의가 필요하며 이 예시의 단순 합계를 그대로 적용하지 않습니다.
검수용 기준 합계도 답변 사용자에게 허용된 같은 범위에서 만듭니다. 권한 밖의 총계나 차이를 응답에 노출하지 않습니다. 계산 경로와 허용된 원천 근거를 남기는 방법은 AI 답변 출처 추적 설계와 함께 확인하세요.
알파카랩스와 어떤 집계 검수 범위를 정하나요?#
알파카랩스의 공개 온톨로지 서비스는 개념·관계와 공통 식별자, 원천 매핑·기존 집계 대사·출처와 권한을 검수 범위로 협의한다고 안내합니다. 이는 자사 제공 방식의 설명입니다. 본문의 집계 보정이 제품 기본 기능이거나 실제 고객에게 성과가 검증됐다는 뜻은 아닙니다.
준비할 자료는 비식별 주문·품목 키 구조, 금액의 기준 원천, 대표 질문과 기대 합계입니다. 지표의 기준 키·허용 관계/필터·정답과 반례를 인수 조건 초안으로 묶을 범위를 협의합니다. 기존 SQL과 지표 정의 정비로 충분한지, 여러 개념·관계의 모델링이 필요한지도 비교합니다. 별도 산출물과 비용·기간은 원천 접근·보안·관계 복잡도를 확인한 뒤 정합니다.
온톨로지 AI 중복 집계에서 자주 묻는 질문#
- 온톨로지를 만들면 조인 중복 집계가 자동으로 없어지나요?
- 자동으로 보장되지 않습니다. 지표가 주문·품목 행 중 어디에 속하는지, 어떤 키와 관계로 계산하는지 정하고 실행 결과를 검수해야 합니다. 그래프 DB를 쓰는 경우에도 같은 주문을 여러 경로에서 만났을 때의 집계 기준을 확인합니다.
- SUM(DISTINCT 금액)으로 주문 합계를 고치면 안 되나요?
- 금액 값의 중복을 제거하면 같은 금액인 서로 다른 주문도 합쳐집니다. 주문 전체 금액을 합산하는 질문이라면 승인된 대상 주문을 고른 뒤 주문 키별 금액을 한 번씩 더해야 합니다. 키가 같아도 금액이 충돌한다면 먼저 원천과 버전을 확인합니다.
- COUNT(DISTINCT 주문 키)가 맞으면 금액 합계도 맞는 건가요?
- 주문 수와 주문 금액은 각각 검수해야 합니다. 주문 키의 개수는 맞아도 같은 조인 결과에서 금액을 반복 합산할 수 있습니다. 포함된 키와 키별 기여 금액을 기준 원천과 함께 대조하세요.
- 품목 조건이 있는 질문도 주문 금액을 먼저 합산하면 되나요?
- 질문이 해당 품목을 포함한 주문의 전체 금액인지, 해당 품목 행의 금액만 요구하는지 먼저 구분합니다. 승인된 필터와 대상 키를 정한 뒤 지표의 기준 단위로 계산해야 합니다. 관련 없는 주문까지 먼저 합산하면 질문의 범위가 바뀝니다.
- 같은 주문이 여러 분류에 속하면 분류별 합계를 더해도 되나요?
- 분류가 겹치면 같은 주문이 여러 소계에 포함될 수 있습니다. 전체 합계는 승인된 전체 주문 키로 다시 계산하거나 합의한 배분 규칙을 적용해야 합니다. 각 분류의 소계를 단순히 더한 값을 전체 금액이라고 표시하지 않습니다.
같은 금액의 다른 주문으로 집계 기준을 검수하세요.
비식별 키 구조·대표 질문·기대 합계로 지표 정의와 인수 조건 초안을 협의합니다. 별도 산출물과 비용·기간은 데이터 경로·보안 범위 확인 후 정합니다.
온톨로지 집계 검수 범위 확인