KR20010072019A - 데이터 웨어하우스에 대한 애그리깃 레벨 및 크로스프로덕트 레벨을 선택하는 방법 및 장치 - Google Patents

데이터 웨어하우스에 대한 애그리깃 레벨 및 크로스프로덕트 레벨을 선택하는 방법 및 장치 Download PDF

Info

Publication number
KR20010072019A
KR20010072019A KR1020017000926A KR20017000926A KR20010072019A KR 20010072019 A KR20010072019 A KR 20010072019A KR 1020017000926 A KR1020017000926 A KR 1020017000926A KR 20017000926 A KR20017000926 A KR 20017000926A KR 20010072019 A KR20010072019 A KR 20010072019A
Authority
KR
South Korea
Prior art keywords
level
dimension
attribute
levels
rule
Prior art date
Application number
KR1020017000926A
Other languages
English (en)
Inventor
로어마이클딘.
체이바만-얀
Original Assignee
로어 마이클 딘
플라티늄 테크놀로지 아이피, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 로어 마이클 딘, 플라티늄 테크놀로지 아이피, 인코포레이티드 filed Critical 로어 마이클 딘
Publication of KR20010072019A publication Critical patent/KR20010072019A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q10/00Administration; Management
    • G06Q10/06Resources, workflows, human or project management; Enterprise or organisation planning; Enterprise or organisation modelling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q40/00Finance; Insurance; Tax strategies; Processing of corporate or income taxes
    • G06Q40/06Asset management; Financial planning or analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99933Query processing, i.e. searching

Landscapes

  • Engineering & Computer Science (AREA)
  • Business, Economics & Management (AREA)
  • Human Resources & Organizations (AREA)
  • Strategic Management (AREA)
  • Development Economics (AREA)
  • Entrepreneurship & Innovation (AREA)
  • Economics (AREA)
  • Marketing (AREA)
  • General Business, Economics & Management (AREA)
  • Game Theory and Decision Science (AREA)
  • Finance (AREA)
  • Accounting & Taxation (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Operations Research (AREA)
  • General Physics & Mathematics (AREA)
  • Technology Law (AREA)
  • Educational Administration (AREA)
  • Quality & Reliability (AREA)
  • Tourism & Hospitality (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)

Abstract

애그리깃 레벨(도2b), 애그리깃 서브레벨, 및 하나 또는 그 이상의 디멘션을 포함하는 데이터 스토어에서 애그리게이션을 위해 사용되는 크로스 프로덕트 레벨(도2a)을 정의하는 방법. 레벨들은 디멘션에 있는 속성에 따라 정의되고, 따라서 상기 속성의 값들에 따라 데이터가 애그리깃으로 집계될 수 있다(도3a 및 3b).

Description

데이터 웨어하우스에 대한 애그리깃 레벨 및 크로스 프로덕트 레벨을 선택하는 방법 및 장치{METHOD AND APPARATUS FOR SELECTING AGGREGATE LEVELS AND CROSS PRODUCT LEVELS FOR A DATA WAREHOUSE}
일반적으로 데이터 웨어하우스는 정보를 검색하여 분석하는 비즈니스 구조에 관한 다량의 데이터를 포함한다. 랄프 킴벨(Ralph Kimball), 존 와일리 앤 선즈(John Wiley & Sons)사의 웨어하우스 툴킷(ISBN 0-471-15337-0)은 데이터 웨어하우스에 대한 우수한 배경기술을 제공한다. 성공적인 데이터 웨어하우스를 형성하는 제1 단계중 하나는 서로 다른 디멘션(dimension)들과 하나의 비즈니스 구조 내에서 설정되는 팩트(fact)를 올바르게 식별하는 것이다. 이는 흔히 디멘션 모델링으로 알려져 있다. 각각의 디멘션은 다른 디멘션과는 독립된 엔티티(entity)들의 팩트 세트(fact set)에 참여하는 유일한 엔티티들의 모임을 나타낸다. 상기 팩트 세트는, 각각의 거래(또는 레코드)가 각 디멘션마다 엔티티들의 조합에 의해 식별되는 거래 데이터들을 통상적으로 포함한다. 도1은 하나의 수퍼마켓 비즈니스에 대한 스타 스키마(star schema)를 기술하며, 여기서 스타 스키마는 디멘션 모델링 프로세스의 산출물이다.
각각의 디멘션은 각각의 레코드가 엔티티를 유일하게 식별하기 위한 하나의 키(또는 합성 키) 및 대응 엔티티(또는 키)를 한정 또는 기술하는 속성(attribute)들의 목록을 포함하는 테이블이다. 팩트 테이블에 있는 각각의 팩트 레코드는 각 디멘션과 조인(join)하는 외부 키, 및 거래 데이터를 나타내는 크기의 목록을 포함한다. 디멘션의 크기는 상기 팩트 테이블의 크기보다 통상 훨씬 작기 때문에 상기 디멘션 테이블은 보통 더 이상 정규화되지 않는다. 따라서, 정규화에 의해 절약되는 공간은 별로 중요하지 않다. 또한, OLAP 질의 툴(query tool)이 질의 실행시 정규화된 디멘션 테이블과 조인하는 것은 시간적으로 효과적이지 못하다.
이론상, OLAP 툴은 전술한 스타 스키마 레이아웃에서 거래 데이터를 포함하는 데이터 웨어하우스에 대한 질의를 직접 실행할 수 있다. 그러나, 예컨대 각 스테이트(state)에 대한 특정 브랜드 상품의 월 매출액을 구하는 질의와 같은 높은 수준의 질의시 빠른 응답 시간을 허용하기 위해서는, 데이터 웨어하우스에 있는 데이터의 프리-애그리게이션(pre-aggregation)이 절실히 요구된다.
데이터의 프리-애그리게이션은 흔히 요구되는 질의(질문)에 대한 OLAP 툴로부터의 빠른 질의 응답시간을 용이하게 하기 때문에 중요하다. 따라서, 데이터 웨어하우스에서 발생하는 애그리깃의 올바른 집합을 정의할 수 있는 것은 훨씬 더 중요하다. 그렇지 않으면, OLAP 툴은 미리 계산된 애그리깃의 효과를 볼 수 없다.
데이터의 레벨은 애그리게이션 목적으로 각각의 디멘션에서 명시된다. 각각의 레벨은 하나의 조건에 근거한 디멘션 엔트리들의 그룹핑(grouping)을 정의한다.예컨대, 스토어(store) 디멘션에서, 하나의 레벨은, 각각의 애그리깃 레코드가 적어도 하나의 스토어를 나타내는 각 스테이트마다 상기 레벨이 하나의 애그리깃 디멘션 레코드를 포함하도록 서로 다른 스테이트들에 대해 명시된다. 즉, 특정 스테이트에 대한 애그리깃 디멘션 레코드는 그 스테이트에 있는 모든 스토어의 애그리게이션을 나타낸다. 마찬가지로, 각각의 엔트리가 특정 시티(city)에 있는 모든 스토어의 애그리게이션을 나타내는 애그리깃 디멘션 레코드를 생성하도록 스토어 디멘션에 있는 다른 시티 레벨을 명시할 수 있다. 또한, 레벨들은 애그리게이션 레벨로서 언급된다.
따라서, 각각의 레벨은 그 특정 레벨에서 발생되는 애그리깃의 그룹을 결정한다. 각각의 레벨과 관련된 조건 또는 룰(rule)은 디테일(detail) 디멘션 레코드와 애그리깃 디멘션 레코드간의 포함 관계를 인식하는데 사용된다. 또한, 상기 조건은 디테일 레벨 디멘션 레코드를 서로 다른 애그리깃으로 그룹핑하는 융통성을 결정한다.
각각의 애그리깃 디멘션 레코드는 이에 대한 하나의 디멘션 레코드가 입력 디멘션 테이블에는 본래 없기 때문에 하나의 대용(또는 합성) 키를 포함한다. 상기 키는 상기 애그리깃 디멘션 레코드들을 출력 팩트 테이블에서 발생되는 애그리깃들과 조인하는데 사용된다. 대부분의 경우, 대용 키들은 또한, 애그리깃 및 입력 디멘션 레코드들이 동일 레이아웃을 갖도록 입력 디멘션 레코드들에 대해 생성된다. 이때, 모든 팩트 애그리깃 레코드들은 각각의 디멘션 애그리깃 또는 입력 레벨 레코드들과 동일 타입 키들로서 조인되기 때문에 하나의 레이아웃을 갖는다.
모든 속성(attribute)들이 하나의 애그리깃 디멘션 레코드에 대해 유효하거나 의미를 갖는 것은 아니다. 상기의 경우, 이들 속성 값은 억제(suppress)된다. 예컨대, 하나의 스토어 디멘션에서, 그 스테이트 레벨에 있는 애그리깃 디멘션 레코드는, 그 거리 주소 및 시티 속성을 무의미하게 하는데, 이는 이들 속성이 이미 개개의 스토어들을 기술하고 있기 때문이다. 억제된 속성들은 널(null) 값 또는 사용자에 의해 구체화되는 디폴트(default) 값으로 채워진다.
출력 팩트 데이터에서 요구되는 애그리깃들은, 각각의 디멘션마다 집계될 레벨들의 조합에 의해 명시된다. 애그리게이션을 명시하는데 사용되는 레벨들의 조합은 또한 레벨들의 크로스 프로덕트(cross product)로 호칭된다. 전술한 스타 스키마 예에서 브랜드별 스테이트별 1개월 질의를 실행하기 위해, 해당 레벨은 각각의 디멘션에서 정의될 필요가 있다, 거래 데이터의 애그리게이션은 3개의 명시된 레벨들의 크로스 프로덕트를 기초로 요구될 필요가 있다. 사용자들은 애그리게이션을 원하는 크로스 프로덕트들의 목록을 명시한다. 입력(또는 디테일) 레벨의 크로스 프로덕트는 입력 또는 디테일 팩트 데이터를 나타낸다.
하나의 "디멘션" 레벨은 모든 디멘션 레코드들을 포함하는 단일 멤버로서 하나의 디멘션에서 종종 정의된다. 하나의 크로스 프로덕트 내에서 상기 레벨을 이용하면 그 크로스 프로덕트로부터 상기 디멘션이 효과적으로 제거된다. 예컨대, 상기 디멘션 레벨이 상기 크로스 프로덕트의 프로덕트 디멘션에서 명시되면, 스테이트별 1개월의 질의가 생성된다.
본 명세서의 기술은 하나의 디멘션 내에서 레벨들을 정의하는 것과 관련된다.
오늘날 많은 OLAP 툴들은 사용자로 하여금 단순한 애그리게이션 레벨들을 명시하는 것을 가능케 한다. 이 기술은 반복적이고 단순한 OLAP 질의들에 필요한 대부분을 제공한다. 그러나, 칼럼들의 조합 또는 복잡한 선택 범주를 이용하는 보다 복잡한 질의는 미리 생성된 보다 정교한 애그리깃이 도움이 된다.
본 양수인에 의해 개발된 이전의 제품은 디테일 디멘션 레코드와 애그리깃 디멘션 레코드간의 포함관계를 인식하고, 팩트 데이터의 애그리게이션을 행하는 컨설팅 서비스를 제공한다. 애그리깃 디멘션 레코드를 인식하는데 이용되는 레벨 룰은 서로 다른 속성 값을 근거로 한다. 각각의 레벨 룰은 0 또는 그 이상의 룰 아이템을 포함할 수 있다. 룰 아이템이 레벨 룰에서 명시되지 않으면, 이는 모든 디멘션 레코드가 하나의 애그리깃 레코드에 무조건적으로 통합됨을 의미한다. 각각의 룰 아이템은 하나의 독특한 디멘션 속성을 가리키고, 이 룰 아이템은 조건적이거나 무조건적일 수 있다.
하나의 무조건적인 룰 아이템은 해당 디멘션에 있는 하나의 속성으로 구성된다. 예컨대, 스토어(Store) 디멘션은 스테이트(State) 속성에 대한 무조건적 룰 아이템을 가진 하나의 레벨을 포함할 수 있다. 이는 입력 디멘션에서 각각 서로 다른 스테이트 속성 값에 대해 생성되는 하나의 애그리깃 디멘션 레코드가 있음을 의미한다.
하나의 조건 룰 아이템은 하나의 속성, 하나의 등가 또는 비등가 연산자, 및 하나의 값으로 구성된다. 예컨대, 상기 조건 룰 아이템이 스토어 디멘션에 대해 "스테이트는 TX와 같다(state equal TX)"인 경우, TX와 같은 스테이트를 가진 디멘션 레코드들이 존재하면 하나의 애그리깃 디멘션이 생성된다. 상기 조건 룰 아이템이 "스테이트는 TX와 같지 않다"인 경우, TX를 제외한 각각 서로 다른 스테이트 속성 값에 대해 하나의 애그리깃 디멘션 레코드가 생성된다.
복수의 룰 아이템을 가진 레벨 룰들은 룰 아이템들의 집합으로부터 속성 값들의 각각 다른 조합에 대해 하나의 애그리깃 디멘션 레코드를 생성한다. 복수의 룰 아이템들을 명시하면 속성 또는 레벨들의 실제의 계층 오더(order)를 모르고도 계층 레벨들을 인식할 수 있다. 예컨대, 하나의 레벨 룰은 2개의 무조건적 룰 아이템: 스테이트 속성에 대한 하나와 시티 속성에 대한 다른 하나를 포함할 수 있다. 다른 스테이트에서 나온 동일명의 2개의 시티가 있다면, 이들은 2개의 서로 다른 애그리게이션 레코드들을 적절히 생성한다. 반면, 상기 레벨 룰이 시티 속성에 대해 단지 하나의 무조건적 룰 아이템을 갖는다면, 2 시티들의 팩트 데이터는 하나의 레코드로 잘못 통합된다.
애그리게이션을 제공하는 다른 제품은, 코드명 플라토(Plato)인 마이크로소프트(Microsoft)사의 SQL 서버 7.0 베타 OLAP 서버이다. 각각의 레벨은 하나의 디멘션 속성과 관련된다. 그러나, 모든 레벨들은 계층적 오더로 명시되고, 따라서 하나의 애그리깃 레코드가 현행 및 그 상위의 모든 레벨들로부터 각각의 서로 다른 속성 값 조합에 대해 생성된다. 따라서, 그것은 전술한 본 양수인의 이전 제품의 무조건적 레벨 룰과 유사하다.
OLAP 및 애그리게이션 제품들은 애그리게이션 레벨들을 식별하는 간결하고융통성있는 방법을 필요로 한다. 하나의 흔한 관행은 디멘션 테이블의 하나 또는 그 이상의 칼럼들에 있는 서로 다른 값들로부터 레벨들을 식별하는 것이다. 레벨 칼럼들의 각각 유일한 조합은 그 레벨에서의 애그리게이션을 나타낸다. 예컨대, 레벨 칼럼 시티(City) 및 스테이트(State)는 휴스톤(Houston) 및 텍사스(Texas)의 유일한 조합을 포함하며, 이는 그 시티 애그리게이션 레벨에서 하나의 애그리게이션을 나타낸다.
상기 관행은 여러 가지 이유로 별로 융통성이 없다:
생성되는 애그리깃들을 제한할 수 있는 레벨들을 명시할 수 있는 능력이 요구되므로, 모든 조합들이 생성되지는 않는다. 데이터 웨어하우스의 확장을 제어하는 것은 중요하고, 거의 사용되지 않는 애그리깃들 또는 데이터를 별로 포함하지 않는 애그리깃들을 생성하는 것은 사치이며 공간 낭비이다. 예컨대, 오스틴 텍사스에 단지 하나의 스토어가 있다면, 사용자는 오스틴에 대한 애그리깃 레코드가 디멘션에 부가되는 것을 방지할 수 있어야 한다. 이와 같이, 사용자는 OLAP 분석의 속도를 향상시키기 위해 어느 애그리깃들이 실제로 필요한지를 조율할 수 있다. 이전 제품들은 선택 능력은 어느 정도 제공하였으나, 그 사용은 매우 불편하였다.
디멘션 속성들로부터 용이하게 유도되지 않는 레벨들을 명시하는 능력이 요구된다. 예컨대, 스테이트, 시티 및 인구 속성이 주어질 때, 스테이트의 작은 타운에 대한 애그리깃을 원할 수도 있다.시티,스테이트, 및인구 < 50000(여러분이표현식 기반의 레벨 ID를 가지고 있다고 가정한다)을 포함하는 레벨을 생성하기는 용이하더라도, 이는나바소타,텍사스,23450파리,텍사스,34982와 같은 각각의 애그리깃 디멘션 레코드들을 생성한다. 인구가 50000 미만인 스테이트의 모든 시티들에 대한 단일 애그리깃을 얻는 직접적인 방법은 없다. 이는 상기 OLAP 툴이 보다 많은 로우(row)들에 대한 질의를 행함을 의미한다.
또한, 레벨들의 크로스 프로덕트(전술된 바 있음)가 보다 용이하게 간략히 명시되도록 레벨들을 그룹화할 수 있는 기능이 요구된다. 3개의 디멘션들에 대해 디멘션당 단지 10 레벨들만 있다면, 모든 조합들은 엔트리들의 길이가 1,000인 레벨들의 크로스 프로덕트가 산출된다.
속성이 부적절한 레벨을 명시하는 기능이 더 요구된다. 예컨대,남성 인구,여성 인구,남성 평균 연령, 및여성 평균 연령에 대한 속성들은 사용 가능하지만 "평균 연령 > 50"의 조건이 요구되면, "평균 연령" 속성은, 이론상으로는 그 레벨을 형성하는데 필요한 충분한 정보가 있을지라도, 상기 레벨을 직접 생성할 수 없다. 일부 제품들은 디멘션 테이블에 상존하지 않지만 애그리게이션 목적으로 생성되는 "유도 속성"을 제공함으로써 이 문제를 해결한다. 이는 특정 상황에서는 잘 적용될 수 있지만, 시간을 두고 속성을 추적하는 시스템들에서는 문제를 야기할 수 있다. 예컨대, 디멘션 테이블에서 레벨 멤버들을 나타내는 합성 키들은 종종 디멘션 테이블에 영구히 저장된다. 특정 속성들과 관련된 합성 키들은 절대 변하지 않으며, 서로 다른 시기에 발생하는 애그리깃들은 동일 키 값을 갖는다. 애그리깃들이 동일 키를 보유한다는 사실은 매우 유용할 수 있다. 그러나, 본질적으로는 애그리게이션들간에 상존하지 않는 유도 속성이 사용되면, 서로 다른 시기에 생성되는 애그리깃들은 동일 속성 값들에 대해 서로 다른 키를 갖는 것이 불가피하다. 이러한 이유로, 많은 아키텍처들은 유도 속성을 사용하는 것을 피함으로써 고정된 합성 키를 유지하지만, 상기 유도 속성에 의해 가능한 장점들은 여전히 요망되는 경우가 있다.
본 발명은 데이터 웨어하우스(data warehouse)에서 발생하는 애그리깃 (aggregate)을 선택하는 방법에 관한 것이다.
도1은 본 발명에 의해 처리될 수 있는 소정의 간단한 수퍼마켓 비즈니스의 스타 스키마의 일례를 나타낸다.
도2a 및 2b는 본 발명의 제1 실시예의 제1 예에 대한 레벨 멤버 매핑(mapping) 테이블의 디테일 키 및 디멘션 테이블을 나타낸다.
도3a 및 3b는 본 발명의 제1 실시예의 제2 예에 대한 레벨 멤버 매핑 테이블의 디테일 키 및 디멘션 테이블을 나타낸다.
본 발명의 일 특징에서, 표현식 기반의 레벨 ID가 제공되어 보다 단순하고 보다 강력하게 레벨들을 선택할 수 있다. 관련 디멘션에 있는 속성들을 단지 명시함으로써 레벨들을 정의하는 대신, 각각의 레벨 룰에 대한 표현식이 그 레벨에 기여하게 될 속성의 값을 제한하는 각각의 속성에 제공된다.
본 발명의 다른 특징에서, 페어런트 레벨(parent level)과 동일한 속성 값들과 그룹을 형성하지만, 임의 또는 모든 칼럼들에 있는 속성들의 조합을 연계시키는 룰을 근거로 하나의 레벨에 참여하는 디테일 엔트리에 대한 기준을 좁히는 서브레벨(sublevel)들이 제공된다. 이는 계층 레벨 개념이 결합되는 다른 칼럼들에 있는 값들을 허용하지 않을 때 2개 또는 그 이상의 칼럼을 이용하는 레벨 룰들을 근거로 레벨들이 정의될 수 있는 종래의 계층 레벨 개념과는 다르다. 따라서, 서브레벨 개념은 하나의 레벨 룰 단독으로는 이룰 수 없는 부가적인 레벨들을 허용한다. 예컨대, 서브레벨 기준을 이용함으로써, 여성 평균 연령, 남성 평균 연령, 여성 인구 및 남성 인구와 같은 다른 속성들로부터 평균 연령이 계산될 수 있고, 이를 애그리게이션 레코드 생성의 기초로 이용한다. 보다 간단한 예는, "서던(Southern)" 속성을 이용할 수 없을 때,서던스테이트에 대한 애그리깃을 계산하는 것이다. 서브레벨은 스테이트가 서던 스테이트의 목록에 있는지의 여부를 검색하는데 이용될 수있다.
서브레벨들은 상기 능력을 뒷받침하는 상부 레벨에 대한 하나의 "where" 조건처럼 작용한다. 서브레벨들을 이용하여, 스테이트 레벨이 정의되고 서브레벨에인구 < 50000의 조건이 부가된다. 이로써 "스테이트에 있는 모든 작은 타운(All Small Towns in State)" 서브레벨에 대한텍사스, <널(null)>, <널>과 같은 애그리깃 디멘션 레코드들이 생성된다. OLAP 사용자들은 상기 레벨에 대한 질의를 행할 수 있고 결과를 비교할 수 있다.
본 발명의 또 다른 특징에서, 레벨들의 크로스 프로덕트에 있는 레벨들 중에서 어느 것이 생성되어야 하는지를 명시하는 것을 상당히 단순화시키는 레벨 그룹들이 제공된다. 레벨 그룹들은 크로스 프로덕트에 있는 단일 엔트리의 모든 그룹에 대한 시방서를 제공한다. 이에 의해 크로스 프로덕트를 유지보수 하기가 보다 용이하다.
종래 레벨들은 칼럼 값들이 레벨에 있는 애그리깃 레코드들을 명시하는 칼럼들의 목록인레벨 룰에 의해 식별된다. 도1에 나타낸스토어디멘션을 고려하면, 시티(city) 및 스테이트(state) 레벨들은 다음과 같이 명시된다:
시티 레벨 룰 = 시티, 스테이트
스테이트 레벨 룰 = 스테이트
명시된 각각의 칼럼은 하나의 룰 아이템이다. (주: 상기 종래 기술을 이용하는 제품들은 다른 용어를 사용하지만, 실질적으로 그 방법은 동일하다.) 상기 시티 레벨 룰은 시티 레벨이 시티 및 스테이트의 각각의 유일한 조합에 대한 하나의 애그리깃 디멘션 레코드를 포함하는 것을 가리킨다. 상기 스테이트 레벨 룰은 스테이트 레벨이 각각의 유일한 스테이트에 대한 애그리깃 디멘션 레코드를 포함하는 것을 가리킨다.
룰 아이템들은 오직 하나의 속성 칼럼을 나타낸다. 하나의 레벨 룰에 있는 각각의 룰 아이템은 나머지와 다른 칼럼을 가리켜야 한다. 복수의 룰 아이템들을 이용함으로써, 계층적 레벨들이 구성될 수 있다. "모든 것의 합"에 대한 단일 레벨을 형성하기 위해, 하나의 레벨 룰은 제로 룰 아이템들을 포함한다.
애그리깃 디멘션 레코드들을 자동으로 발생시키는 제품들은 디테일 디멘션 데이터로부터 레벨 룰에 의해 명시되는 유일한 조합들을 추출함으로써 그렇게 한다. 대부분의 이들 제품은 불완전한 또는 블랭크(blank) 데이터를 생략하는 방법을 포함한다. 예컨대, 스테이트 필드가 블랭크라면, 통상 하나의 "블랭크" 스테이트 애그리깃은 요구되지 않는다.
본 발명은 각각의 룰 아이템에 대한 완전한 표현식(expression)을 구성함으로써 종래 레벨 룰의 개념을 개선한다. 각각의 표현식은 속성이 조건과 일치하면 참값(TRUE)이 되고, 그렇지 않으면 거짓값(FALSE)이 된다. 각각의 룰 아이템은 다른 칼럼을 가리켜야만 한다.
룰 아이템 표현식들은 속성들을 변경시키지 않음을 주목하는 것은 중요하다. 그 대신, 이들은 디멘션에 있는 데이터의 어느 조합들이 애그리깃 레코드들을 포함하는지를 제한한다. 예컨대, 룰 아이템은 스테이트의 첫 번째 글자가 "T"일 때 참값이 된다. 이때, 애그리깃 레코드들은 "Texas"에 대해서는 생성되지만, "Michigan"에 대해서는 생성되지 않는다. 대부분의 데이터가 "Texas"를 포함하면, 데이터가 불필요하게 집계되는 것이 방지된다.
룰 아이템 표현식에 대한 하나의 특정 구현은 역-폴리쉬 표기법(reverse-polish notation)인 간단한 표현식 언어를 이용한다. 상기 언어는 수학적 연산, 스트링 연산, 날짜 연산, 칼럼 참조, 레지스터 변수 및 기타 특징을 포함한다. 이 언어는 효과적이고, 구현하기 용이하고, 사용자 인터페이스에 의해 분석이 용이하기 때문에 적절하다; 가장 전형적인 경우 임의의 표현식 언어를 사용자에게 노출시키지 않고 입력될 수 있다. 그러나, 상기 특정 표현식 언어의 구문은 구현에 있어 특히 중요한 것은 아니다. 다른 적정 언어는 자바스크립트(JavaScript), 베이직(BASIC), 펄(Perl), 자바(Java), 또는 기타 등이 될 수 있다. 주 요구사항은 그 언어가 칼럼 변수에 대한 접근 방법(또는 이를 언어에 부가하는 방법)을 포함해야 한다는 것이다.
역-폴리쉬 표기 언어가 내부적으로 사용되더라도, 소정의 예들은 명확히 하기 위해 표준적이고 수학적 스타일인 인픽스(infix) 표현식을 이용할 것이다.
표현식을 이용한 매우 다양한 테스트들이 가능하지만, 본 실시예에는 레벨 룰 아이템에 대한 4개의 공통된 카테고리가 있다:
1) 같다(equal), 같지 않다(not equal), 크다(greater than), 작다(less than), 크거나 같다(greater than or equal), 작거나 같다(less than or equal).
각각의 상기 비교 연산자들은 2개의 피연산자: 하나의 속성 칼럼 표현식과 하나의 값 표현식을 포함한다. 칼럼 표현식은 속성 칼럼을 참조해야 한다. 값 표현식은 속성 칼럼 표현식과 동일한 데이터형의 상수 값을 구한다. 기본적으로 비교 연산자는 조건이 참인지를 결정한다.
2) 엠프티(empty), 낫 엠프티(not empty).
이들 연산자는 그 피연산자로서 속성 칼럼과 선택적인 엠프티 값에 대한 참조를 요구한다. 사용자들은 속성 칼럼이 엠프티라고 여겨지는 값을 명시할 수 있다. 예컨대, "N/A" 값은 제품 디멘션에서 엠프티로서 무게 속성 칼럼을 가리킨다. 참조된 속성 칼럼에 대해 엠프티 값이 명시되지 않으면, 그 속성에 대한 엠프티 값으로 널(null) 값을 고려한다. 이들 2개의 연산자는 디테일 레코드의 속성이 엠프티 조건을 만족하는지의 여부를 테스트한다.
3) 존재(exists), 비존재(not exists)
이들 연산자들 역시 "애그리깃 엠프티 밸류(aggregate empty value)"라 불리는 프로그램 세팅을 이용하는 점을 제외하고는, 기본적으로 "엠프티(empty)" 및 "낫 엠프티(not empty)"와 동일하다. 상기 프로그램 세팅은 애그리깃 레코드들이 통상적으로는 엠프티로 여겨지는 값들로 생성되어야 함을 의미한다. 상기 "존재(exists)" 연산자는 정확히 종래의 레벨 룰 아이템에 해당한다.
4) 인클루드 리스트(include list), 익스클루드 리스트(exclude list).
이들 연산자는 2개의 피연산자: 값 표현식의 목록 및 속성 컬럼 표현식을 요구한다. 디테일 레코드가 주어지면, 이들은 속성 칼럼 표현식의 결과 값이 각각 값들의 목록에 있는지의 여부를 결정한다. "인클루드 리스트"에 있어서, 그 리스트에 있는 값들 중 하나로 평가되는 하나의 속성을 가진 모든 디테일 레코드들은 상기 조건을 만족시킨다. "익스클루드 리스트"에 있어서, 그 리스트에 있는 값들 중 어느 것으로도 평가되지 않는 하나의 속성을 갖는 모든 디테일 레코드들은 상기 조건을 만족시킨다.
룰 아이템들의 가능한 타입(type)들은 분명히 상기 리스트에 제한되지는 않지만, 상기 리스트는 보다 공통된 요구사항을 정의한다. 룰 아이템들은 또한 결합되는 테스트들을 가질 수 있다. 룰 아이템들은 AND, OR, 및 NOT과 같은 논리연산자들과 결합될 수 있다. 표현식 언어를 사용하면, 이하의 예들에 나타낸 바와 같이, 룰 아이템들은 고도의 융통성을 발휘한다.
RULE ITEM = AgeGroup > 30 and AgeGrout <= 90
RULE ITEM = not(AgeGroup > 30 and AgeGroup <= 90)
RULE ITEM = Brand = "ABrandName" 또는 Brand = "AnotherBrandName"(상기 인글루드 리스트를 이용함으로써 동일 결과을 얻을 수 있다)
RULE ITEM = word_cap(Brand) in ("AbrandName","AnotherBrandName")
애그리깃 레코드들의 리스트를 생성할 때, 디테일 디멘션 레코드들은 이들이 하나의 레벨에 참여하는지의 여부를 확인하기 위해 스캔(scan)된다. 하나의 레벨에 참여한다는 것은 디테일 레코드의 속성들이 레벨 룰의 요구사항과 일치함을 의미하며, 이는 곧 소정의 디테일 레코드가 그 레벨에 대한 애그리깃 디멘션 레코드에 의해 식별되는 애그리깃을 얻기 위해 "집계(summed up)"되어야 하는 팩트 데이터를 식별하는 것을 의미한다.
디테일 디멘션 레코드는 그 레벨 룰에 있는 모든 룰 아이템들의 조건을 충족시킬 경우 하나의 레벨에 참여할 수 있는 자격이 부여된다. 하나의 애그리깃 디멘션 레코드는 속성들이 그 레벨 룰에서 사용되는 속성 값들의 각각의 서로 다른 조합에 대해 생성된다. 애그리깃 레코드들은, 하나의 룰 아이템에 있는 속성 표현식이 아닌, 서로 다른 원래의 속성 값들을 기초로 생성된다. 예컨대, 룰 아이템이 "Ave div 10 = 2"라면, 상기 속성 표현식 "Age div 10"의 결과는 20 내지 29의 범위에 있는 나이 속성 값들에 대해서는 항상 2이다. 10개의 서로 다른 속성 값들이 있다. 상기 룰 아이템이 그 레벨 룰에 있는 유일한 아이템이라면, 열 개의 서로 다른 애그리깃 디멘션 레코드들이 생성될 것이다(각각의 20 내지 29의 값들 중 하나씩).
표현식 기반의 레벨 ID는 어느 애그리깃들이 간단히 형성되는지를 제한하는 우수하고 융통성 있는 수단을 제공한다.
서브레벨(sublevel)은 하나의 레벨에서 기준(criteria)을 부가하는 수단을나타낸다. 서브레벨들은 레벨 룰 단독으로는 성취될 수 없는 부가적인 연산들을 허용한다. 각각의 애그리게이션 레벨은 임의 수의 서브레벨들을 포함할 수 있다. 서브레벨들은 어느 디테일 레코드들이 그 서브레벨이 실제로 참여하는지를 한정함으로써 "where" 조건처럼 작용한다.
각각의 서브레벨은 페어런트 레벨에 대해 생성되는 레코드들의 수까지(서브레벨들은 항상 페어런트 레벨로서 정의된다) 0 또는 그 이상의 디멘션 애그리깃 레코드들을 생성할 수 있다. 페어런트 레벨로부터 각각의 유일한 디멘션 애그리깃 레코드에 대해, 서브레벨은 그 서브레벨 조건이 충족되는지의 여부에 따라, 0 또는 하나의 디멘션 애그리깃 레코드를 생성한다.
각각의 서브레벨 룰은 하나의 불 표현식(boolean expression)으로 구성된다(즉, 그 표현식은 참(TRUE) 또는 거짓(FALSE) 값으로 평가되어야 한다). 상기 불 표현식은 하나 또는 그 이상의 속성 칼럼을 참조해야 한다. 본 실시예의 구현에서, 표현식은 언어에서 지원되는 임의의 연산들을 이용할 수 있다. 상기 서브레벨 룰 표현식은 애그리게이션 레벨 룰에 의해 생성되는 각각의 애그리깃 레코드에 참여하는 디테일 레코드들을 더 필터링(filter)한다.
또한, 서브레벨들은 사용자가 애그리깃들을 생성하는 하나의 옵션(option)을 제공하며, 그렇지 않은 경우 애그리깃들은 그 디멘션에 있는 부가적인 속성 칼럼을 필요로 한다. 다음 예들은 애그리게이션 레벨 룰 단독으로는 대체될 수 없는 서브레벨들의 융통성 및 기능성을 나타낸다.
EXAMPLE 1
본 예는 도2a와 2b에 나타낸다. 도2a는 프로덕트 디멘션 테이블을 나타내고 도2b는 그 디멘션 내에 있는 레벨 정의들을 나타낸다. 상기 프로덕트 디멘션은 다음 속성들: UPC(Univeral Product Code), 프로덕트 명, 가격, 카테고리(category), 브랜드(brand) 및 제조업체를 갖는다.
레벨 룰(rule) : 브랜드(brand)가 존재한다, 제조업자가 존재한다.
서브레벨 룰(rule) : 가격 > 10.00 그리고 카테고리(category) = "음식".
상기 레벨 룰에 의해, 하나의 애그리깃 디멘션 레코드가 브랜드와 제조업체 속성들의 각각 서로다른 조합에 대해 생성된다(8-11의 레코드들). 서브레벨 룰이 이를 포함하는 레벨 룰에 적용되어 부가적인 애그리깃 레코드들(12-13의 레코드들)을 생성한다. 하나의 애그리깃 레코드는, 애그리깃 레코드에 속하고 음식 카테고리(category)와 10달러보다 큰 가격을 가진 적어도 하나의 디테일 레코드가 존재할 때만 브랜드와 제조업체 속성 값들의 하나의 다른 조합에 대해 생성된다. 따라서, 서브레벨은 이를 포함하는 애그리게이션 레벨보다 적은 애그리깃 레코드들을 생성한다. 본 예에서, 4개의 레벨 레코드와 비교되는 2개의 서브레벨 레코드만이 있다. 서브레벨로부터의 각각의 애그리깃 레코드는 특정 브랜드 및 제조업체로부터의 10달러보다 비싼 모든 음식 아이템들의 애그리게이션을 나타낸다.(주: 서브레벨의 애그리깃 레코드를 유일한 애그리게이션의 출력으로 하기 위해, 페어런트 애그리게이션 레벨은 레벨 크로스 프로덕트에서 선택되어서는 안된다.)
애그리깃 레코드는 레벨 룰에서 사용되는 속성들의 각각의 서로 다른 조합에 대해 생성되므로 상기 서브레벨 조건은 레벨 룰 단독으로는 표현될 수 없음에 주목한다. 따라서, 조건이 레벨 룰에 부가되면, 동일 가격의 동일 브랜드(brand)와 제조업체를 가진 모든 음식 아이템들에 대해 하나의 애그리깃 레코드가 존재한다. 레벨 룰에서 사용되는 그룹핑 테크닉은 서브레벨 룰과 같은where조건을 구체화하기에는 불충분하다.
또한, 애그리깃 생성시 서브레벨 룰이 적용되지 않으면(즉, 상기 where 조건), 서브레벨 룰에 의하여 생성되는 애그리깃들은 레벨 룰 단독으로 생성되는 애그리깃의 집합으로부터 유도될 수 없다. 레벨 룰에 의하여 생성되는 애그리깃들은 가격 또는 카테고리 정보를 전혀 포함하지 않게 된다. 상기 속성들은 보다 고도의 브랜드 및 제조업체 레벨로 집계되므로 억제(suppress)된다. 따라서, OLAP 툴은, 디테일 레코드를 분석하지 않으면 애그리깃에 있는 어느 디테일 레코드가 10보다 큰 가격을 갖는지 또는 음식 카테고리에 있는지를 알 수 없다. 그러면, 애그리깃을 생성하는 목적은 완전히 사라진다.
다른 해법은 다음과 같은 레벨 룰을 가지는 것을 포함한다: 브랜드가 존재한다, 제조업체가 존재한다, 가격이 존재한다, 카테고리 = "음식". 이때, 카테고리(category)가 "음식"인 브랜드, 제조업체 및 가격의 각각 서로 다른 조합에 대해 하나의 애그리깃 레코드가 생성된다. 그러면, 상기 OLAP 툴은 "가격 > 10.00"의 where 조건을 생성된 애그리깃에 적용할 수 있고, 따라서 가격이 10보다 큰 레코드들을 더 집계한다. 그러나, 이는 각각의 프로덕트가 서로 다른 가격을 가질 가능성이 매우 높기 때문에 프리-애그리게이션(pre-aggregation)을 이용하는 것이 아니다. 이 경우, 생성되는 애그리깃들의 수는 디테일 레코드들의 수와 거의 동일하게 된다.
서브레벨들은, OLAP 질의 툴을 매우 유익하게 하며, 특히 WHERE 조건이 사용자 그룹을 위한 공통의 필터링 조건인 경우 특히 유익하게 하는 프리-애그리게이션(pre-aggregation) 페이즈(phase)에서의 WHERE 조건을 적용할 수 있게 한다. 예를 들면, 서로 다른 나이 그룹들내의 종업원들에 대한 애그리깃, 특정 가격 범위 내에 있는 모든 상품들에 대한 애그리깃 등을 생성할 수 있다.
EXAMPLE 2
본 예는 도3a 및 3b에 나타낸다. 하나의 종업원 디멘션이 다음 속성들: SSN, 이름, 성별, 주소 및 전화번호로 제공된다.
레벨 룰:
서브레벨 1 룰: substring(1,3,phoneNumber)="281"
서브레벨 2 룰: substring(1,3,phoneNumber)="213"
서브레벨 3 룰: substring(1,3,phoneNumber)="713"
본 예에서, 레벨 룰에는 룰 아이템이 없다. 이는 디멘션으로부터의 모든 디테일 레코드들이 하나의 애그리깃 레코드로 집계됨을 의미한다(이 경우, 도3b에 나타낸 바와 같이, 애그리깃 레코드 8). 따라서, 하나의 애그리깃 레코드만이 생성된다. 상기 레벨 룰은 3개의 서브레벨 룰들을 포함한다. 각각의 서브레벨 룰은 전화번호의 첫 3자리(즉, 지역 코드)를 특정 값과 비교한다. 기본적으로, 제1 서브레벨 룰은 지역코드가 "281"인 모든 디테일 레코드들에 대한 하나의 애그리깃 레코드(레코드 9)를 생성한다. 마찬가지로, 제2 및 제3 서브레벨 룰은 지역코드가 각각 "213"과 "713"인 모든 디테일 레코드들에 대한 하나의 애그리깃 레코드(레코드 10,11)를 생성한다.
다시, 이 애그리깃들은 단지 레벨 룰을 사용함으로써 달성될 수는 없다. 레벨 룰에서 서브레벨 룰 조건을 이용하면 특정 지역 코드를 가지는 각각의 서로 다른 전화번호에 대해 하나의 애그리깃을 잘못 생성할 수 있다.
상기 서브레벨 룰들을 이용하여, 사용자들이 각각의 서브레벨 룰에서 하나씩 모든 지역코드를 기입한다면, 이들은 각각의 지역 코드에 대하여 실제로 하나의 애그리깃 레코드를 생성할 수 있다. 결국, 사용자들은 그들이 레벨 룰을 속성에 적용할 수 있도록 디멘션에 있는 각각의 지역코드 속성을 여전히 생성하기를 원할 것이다. 이는 첨가된 각각의 새로운 지역코드에 대해 서브레벨 룰을 수작업으로 생성할 필요성을 제거한다. 그러나, 서브레벨들은 여분의 속성을 가지지 못하는 즉흥적인 문제는 해결한다.
다른 실시예에서, 입력 팩트 데이터에서 실제의 디멘션 테이블들에 저장되지 않은 유도되는 속성들은 애그리깃 목적들을 위하여 본 프로세스 동안에 정의될 수 있다. 이러한 유도 속성은 도3a 및 3b에서 점선으로 나타난다. 예를 들면, 하나의 속성은 데이터에 있는 속성 칼럼들의 함수로 정의될 수 있고, 이러한 유도 속성은 애그리게이션 목적으로 하나의 애그리깃과 같이 작용하며, 레벨과 서브레벨 룰에서 같은 방법으로 참조될 수 있다. 예를 들면, phoneNumberPrefix라 불리는 유도 속성은 속성 정의 함수 서브스트링(1,3,phoneNumber)으로 정의될 수 있다. 그러면, 데이터는 이 속성을 포함하는 하나의 레벨 룰(본 예에서 지역코드(prefix) 레벨 룰로 호칭된다)로서 직접적으로 전화번호 지역코드에 집계될 수 있다. 실제로, 속성들은 결코 변하는 않는 특정 합성키와 관련되도록 시간에 따라 일반적으로 마스터 파일에 저장되므로, 유도 속성들을 사용하는 것은 편리하지 않다. 따라서, 속성을 부가하는 것은 많은 이전 데이터를 재처리할 것을 요구한다. 상기 특징이 프로세싱을 단순화하기 위하여 본 바람직한 실시예에 의해서는 제공되지 않지만, 그러한 실시예는 본 발명의 범위에 속한다.
또한, 서브레벨들은 다른 비슷한 시나리오에서 매우 유용함이 입증된다. 사용자가 3명의 가장 큰 고객들에 대한 하나의 애그리깃을 생성하기를 원한다면, 사용자는 모든 고객들에 대한 하나의 애그리깃을 생성하여 3명의 가장 큰 고객들을 열거하는 서브레벨 룰을 포함할 수 있다. 이로써 사용자는 동일 목적을 달성하기 위해 새로운 속성을 생성하지 않고도 3명의 모든 고객들에 대한 애그리깃을 하나로 인식할 수 있다. 또한, 동일한 애그리깃 디멘션 레코드를 유지하면서 "top three" 고객들을 시간에 따라 변경할 수 있다(이에 의해 동향 분석이 보다 용이하다).
레벨 룰들과 서브레벨 룰들이 모든 디멘션들에 대하여 일단 명시되면, 애그리게이션 레벨들은 레벨들의 크로스-프로덕트(cross-product)가 가능하다. 레벨들의 크로스-프로덕트에 의해 사용자는 디멘션들간에 어느 애그리게이션들이 데이터 웨어하우스에 부가될 필요가 있는지를 명확히 할 수 있다.
레벨들의 크로스-프로덕트는 단지 각각의 디멘션으로부터 하나의 레벨을 각각 포함하는 엔트리들의 리스트이다. 전술한 스토어, 프로덕트, 및 기간 디멘션들에 대하여, 레벨들의 크로스-프로덕트는 다음과 같을 수 있다.
STORE x PRODUCT x DAY(디테일 또는 입력 데이터)
STORE x ALL_PRODUCTS x MONTH
ALL_STORES x PRODUCT x MONTH
ALL_STORES x ALL_PRODUCTS x MONTH
STORE x ALL_PRODUCTS x QUARTER
ALL_STORES x PRODUCT x QUARTER
ALL_STORES x ALL_PRODUCTS x QUARTER
상기 리스트는 간단하지만, 실제로는 매우 길어질 수 있다. 사용자가 3개의 디멘션들에 대해 디멘션당 단지 10개의 레벨들만을 정의한다면, 모든 조합들이 요구될 때 상기 리스트는 1000 엔트리까지 길어질 수 있다.
본 발명은 상기 문제를 해결하기 위해 레벨 그룹들을 더 제공한다. 하나의 레벨그룹은 레벨들의 크로스-프로덕트에서 하나의 엔트리로서 입력될 수 있는 하나의 디멘션에서 산출되는 레벨들의 리스트이다. 소프트웨어는 레벨 그룹에 의해 나타나는 모든 조합들을 자동으로 전개한다. "MONTH" 및 "QUARTER"를 포함한 하나의 레벨 그룹 "PERIOD_GRP"를 정의함으로써, 상기 리스트는 다음과 같이 줄일 수 있다.
STORE x PRODUCT x DAY(디테일 또는 입력 데이터)
STORE x ALL_PRODUCTS x PERIODS_GRP
ALL_STORES x PRODUCT x PERIODS_GRP
ALL_STORES x ALL_PRODUCTS x PERIODS_GRP
상기 단축된 리스트의 의미는 종래의 리스트와 동일하다. 이 기술은 사용자가 레벨들을 단일 엔티티들로 그룹을 형성할 수 있기 때문에 크로스-프로덕트를 유지하는 것을 훨씬 용이하게 하는 주요 효과를 가진다. 예를 들면, 사용자가 월 및 분기별 애그리깃들을 항상 원할 경우, 레벨 그룹들을 이용하면 모든 원하는 기간의 애그리깃들을 나타내기 위하여 하나의 엔트리를 추가하기만 하면 된다.
레벨 그룹들은 애그리게이션 레벨들, 디테일 레벨들, 및 서브레벨들을 포함할 수 있다. 상기 레벨들의 크로스-프로덕트는 각각의 레벨이 이와 관련된 많은 애그리깃 레코드들을 가지고 있기 때문에 몇 백 또는 몇 천의 실제 애그리깃 레코드들을 나타낼 수 있다.
레벨 그룹들은 또한 하나 이상의 디멘션을 커버하도록 정의될 수 있고, 각각의 디멘션에 포함되는 레벨/서브레벨들의 크로스 프로덕트로 전개될 수 있다. 그러나, 이러한 레벨 그룹은, 관련된 각각의 디멘션에서 레벨 그룹들을 효과적으로 기술하기 위한 하나의 편법일 뿐이고, 따라서 크로스 프로덕트 리스트를 생성하는 것과 관련되는 크로스 프로덕트 정의들의 수를 줄이지는 못한다. 이러한 옵션을 제공하면 인터페이스를 더욱 복잡하게 하고(각각의 엔트리는 단일 디멘션에 대응하지 않으므로), 따라서 그 구현은 바람직하지 않다.
이하 표현식-기반의 레벨 ID, 서브레벨들, 및 레벨 그룹들을 구현하는 시스템 구성요소들을 기술한다. 레벨 ID 및 서브레벨들은, 입력 디멘션 레코드들(거래를 나타냄)이 처리되고 레벨 룰들이 각각의 레코드에 적용되는 디멘션 프로세싱으로 알려진 프로세스의 콘택스트(context)에서 기술된다. 상기 프로세스의 결과는 디멘션 애그리깃 레코드들의 유도된 리스트이고, 또한 디테일과 애그리깃 레코드들간의 포함 관계이다(즉, 디테일 레코드들은 애그리깃 레코드로 표현되는 애그리깃들을 계산하기 위하여 결합되어야만 한다). 이 정보는 사용자에 의하여 지정되는 레벨들의 크로스-프로덕트를 근거로 애그리깃들을 실제로 생성하는, 팩트 프로세싱(fact processing) 동안 (이때 팩트 레코드들이 독출된다) 사용된다.
레벨 그룹들은 계산할 크로스 프로덕트들의 완전한 리스트를 얻기 위한 레벨들의 크로스-프로덕트를 전개하는 것에 관하여 기술된다.
디멘션 프로세싱은 스타 스키마에 있는 각각의 디멘션에 대하여 실행되어야 하고, 다음의 입력 요구사항들을 가진다:
1) 입력 디멘션 레코드들의 리스트
각각의 디멘션에 대하여 디멘션 레코드들의 리스트가 하나씩 있다. 각각의 디멘션 레코드는, 일련의 프라이머리 키(primary key)와 속성들의 리스트를 포함한다. 다음 다이어그램은 디멘션 레코드의 논리적인 그림을 보여준다.
Key1 ... Keyk Attributes1 ... Attributes
키 필드들은 각각의 디멘션 레코드의 프라이머리 키를 포함한다. 일부 디멘션들은 오직 하나의 키 필드만을 가질 수도 있는 반면, 다른 디멘션들은 하나의 레코드를 유일하게 식별하기 위해 복수의 필드들을 조합할 필요가 있을 수 있다.
속성1내지 속성a는 하나의 레코드의 속성 값들을 나타낸다. 이 속성들은 키값이 될 자격이 있고, 각 디멘션 레코드의 특성들을 기술한다.
2) 디멘션 레코드 정의
하나의 디멘션 레코드 정의는 입력 디멘션 레코드들의 리스트와 관련된다. 이는 각각의 키와 속성 필드들의 위치를 정의한다. 이는 또한 각 필드의 이름과 데이터형을 명시한다. 이들은 레벨과 서브레벨 룰들을 분석하는데 요구된다. 필드명들은 대응 필드값들을 나타내는 룰에서 사용된다. 데이터형들은 다른 필드들에 대한 소정의 연산이 유효한지를 확인하기 위해 요구된다(예컨대, 산술 연산은 문자 데이터형 필드들에 대해서는 행해질 수 없다).
3) 레벨 및 서브레벨 룰
디멘션과 관련된 일련의 레벨과 서브레벨 룰들이 있다. 이 룰들은 1.2절의 서술에 따라 지정된다. 사용자들은 생성되는 애그리깃들의 세트를 조사해야 하고, 그 애그리깃들을 생성하기 위하여 각각의 디멘션에서 요구되는 레벨 또는 서브레벨들을 지정해야 한다.
4) 레벨들의 크로스-프로덕트
사용자는 어느 애그리깃을 생성할 것인지를 결정하기 위해 애그리깃 산출 프로세스(팩트 프로세싱(fact processing)이라 호칭한다)에 의해 사용되는 레벨들의 크로스-프로덕트를 지정한다. 이 크로스-프로덕트는 팩트 프로세싱에 앞서 또는 팩트 프로세싱 동안 전개될 필요가 있는 레벨 그룹들에 대한 참조를 포함한다.
본 명세서의 목적으로, 다음의 간단한 오브젝트들이 존재(또는 용이하게 개발될 수 있다)하는 것으로 가정한다. 독자는 이 오브젝트들의 구현 및 목적에 익숙한 충분한 C++ 프로그래밍 능력을 가지고 있다고 가정한다.
1) 표준 템플릿 라이브러리(Standard Template Library)
본 실시예의 많은 구성요소들은, 콘테이너(container) 오브젝트들로서, 이제는 C++ 언어 표준의 일부가 된, 표준 템플릿 라이브러리를 이용한다. 템플릿 벡터 클래스는 오브젝트들의 단순한 배열을 구현하는데 이용된다.
2) 스트링(string)
하나의 심플 스트링 클래스(simple string class)는(적절한 조작 방법으로) 룰 아이템 표현식 및 다른 텍스트를 보유하는데 이용된다.
3)값(Value)
값 오브젝트는 다양한 서로 다른 데이터형의 값들을 포함할 수 있는 오브젝트이다. 데이터베이스 시스템에서, 값들은 전형적으로 문자열, 숫자, 날짜, 또는 바이너리 라지 오즈젝트(binary large object)(BLOB)이다. 이 심플 클래스는 관련된 모든 데이터형을 보유할 수 있고, 그것이 현재 보유하고 있는 값의 데이터형을 "인식"한다. 이 클래스는 데이터베이스 시스템에 있는 다양한 데이터형을 나타내는 단일 오브젝트를 이용하게 함으로써 개발을 단순화시킨다. 값 클래스의 방법들은 다음을 포함한다.
A) bool IsNull() - NULL값이 설정되어 있는지를 가리킨다.
B) void SetNull() - 값(value)을 NULL로 설정한다.
C) DataType GetDataType() - 현재값의 데이터형을 반환한다.
D) void SetValue(datatypev) - 값을 설정한다. 지원되는 각각의 데이터형에 대해 하나의 SetValue 방법이 있다(datatype은 임의의 지원되는 데이터형을 나타낸다).
E) viod GetValue(datatype&v) - 값을 반환한다. 지원되는 각각의 데이터형에 대해 하나의 GetValue 방법이 있다(datatype은 임의의 지원되는 데이터형을 나타낸다). 현재 값이 다른 데이터형이고 요구되는 데이터형으로 변환될 수 없다면, 예외로 처리된다.
4)레코드
하나의 레코드는 값 오브젝트들의 하나의 벡터(vector)이다. 이 클래스는 입력 디멘션 테이블에서 독출된 레코드들을 나타낸다. 각각의 대응 칼럼으로부터 하나의 값을 나타내는 값 오브젝트를 사용함으로써, 다른 데이터형들을 고려할 필요는 없다. 레코드 클래스의 방법들은 다음을 포함한다:
·int FieldCount() - 레코드에 있는 필드들(또는 칼럼들)의 수를 반환한다.
·void GetValue(int i, Value& v) - 주어진 인덱스i의 값을 반환한다.
·void SetValue(int i, const Value& v) - 주어진 인덱스i에 값을 설정한다.
·void Reset(int n) - 모든 레코드들을 초기화하고 n개의 필드를 위한 공간이 있는지를 확인한다.
5)ColumnDef
ColumnDef는 칼럼의 정의이다. ColumnDef의 가장 중요한 특징은 칼럼의 이름과 그 데이터형이지만, ColumnDef는 또한 그 테이블로부터 칼럼을 독출하는 방법에관한 정보를 포함한다. 상기 정보는 시스템 구현에 의해 결정된다. 방법들은 다음을 포함한다:
·DataType GetDataType() - 칼럼의 데이터형을 반환한다.
·void GetName(String& name) - 칼럼(column)의 이름을 구한다.
6)RecordDef
RecordDef는 레코드 정의이다. 이는 주로 ColumnDef 오브젝트의 벡터이지만, 또한 테이블 독출 방법에 관한 타 시스템 구현시 구체화되는 방법들을 보유한다. 방법들은 다음을 포함한다:
·int ColumnCount() - 칼럼들의 수를 반환한다.
·void ResetColumns() - 모든 칼럼들을 초기화한다.
·void RemoveColumn(int i) - 인덱스i인 칼럼을 제거한다.
·void SwapColumns(int i, int j) - 인덱스 i와 j인 칼럼을 교환한다.
·ColumnDef* GetColumn(int i) - 인덱스i의 칼럼 정의를 구한다.
·void AddColumn(ColumnDef* pColDef) - 칼럼 정의를 추가한다.
오브젝트는 또한 필드들에 대한 접근을 보다 용이하게 하기 위해 오버로드(overload)되는 연산자들을 가리키는 배열을 포함한다.
7) 레코드 프로바이더(RecordProvider)
레코드 프로바이더는 디멘션 프로세싱에 레코드들을 제공하는 추상화된 오브젝트이다. 이는 플랫 파일(flat file), 네트워크 소켓(network socket), 또는 SQL 질의의 결과를 독출하는 오브젝트가 될 수 있다. 본 발명의 목적상 레코드 프로바이더의 세부사항은 중요하지 않지만, 다음 방법들(또는 이와 동등한 것들)이 가능하다.
·void Open(const RecordDef& recDef) - 주어진 레코드 정의에 대한 프로바이더를 오픈한다.
·bool ReadRecord(Record& record) - 레코드를 독출하고 레코드가 더 이상 없을 때 참값을 반환한다.
·bool IsAtEnd() - 레코드가 더 이상 없을 때, 참값을 반환한다.
·void Close() - 프로바이더를 닫는다.
8) 레코드 콜렉터(RecordCollector)
레코드 콜렉터는 디테일 프로세싱의 결과로 무엇을 할 것인지를 아는 추상화된 오브젝트이다. 레코드 콜렉터는 애그리깃 디멘션 레코드 및 디테일 디멘션 레코드들을 나타내는 레코드들을 수신한다. 본 바람직한 실시예에서, 시스템은 생성된 애그리깃 레코드들과 원본 디테일 레코드들을 대형 데이터 파일에 유지한다. 레코드들의 구체적인 이용은 시스템 구현에 의해 결정되며, 이 명세서는 레벨 룰을 통해 애그리깃 레코드들이 어떻게 식별되는지를 기술한다. 레코드 콜렉터는 다음 방법들(또는 그 동등의 것들)을 포함한다:
·void WriteAggregate(const Record& detail, const Record& aggregate, const Level& aggrLevel)
이 방법은 소정의 디테일 레코드에 대해 생성된 애그리깃 레코드를 받는다.이는 동일 디테일 또는 애그리깃 레코드로 여러 번 호출될 수 있다.(주: 레벨 타입은 본 명세서에서 추후 정의된다 - 이는 단지 애그리게이션 레벨에 대한 하나의 오브젝트이다.)
레코드 콜렉터는 개념적으로 2개를 받는다. 첫째, 이는 디멘션에 대해 생성된 모든 애그리깃 레코드들을 받는다. 둘째, 이는 디테일 레코드와 애그리깃 레코드들간의 관계들을 받는다. (방법 매개변수들을 보면, 소정의 디테일이 생성된 애그리깃의 일부임을 알 수 있다.) 이 정보를 가지고 무엇을 할 것인지를 아는 것은 레코드 콜렉터에게 달렸다. 상기 세부사항들은 시스템 구현에 의해 구체화된다.
본 바람직한 소프트웨어 구현에서, 레벨들은 이들에게 할당된 정수 코드들을 포함하고, 모든 디테일 및 애그리깃 디멘션 레코드들에는 대용(또는 합성)의 정수 키(integer key)가 할당된다. 디테일(detail)들과 애그리깃들 사이의 관계는 애그리게이션 레벨 코드, 디테일 합성키, 및 애그리깃 합성키를 가지는 레코드들을 포함하는 데이터 파일에 수록된다. 상기 데이터 파일은 디테일들이 어느 애그리깃에 결합되어야 하는지를 결정하기 위해 팩트 프로세싱시 사용된다. 또한, 모든 디테일 및 애그리깃 디멘션 레코드들은 데이터 파일에 저장된다. 상기는 본질적으로 본 실시예의 특정 레코드 콜렉터가 기능하는 방법이며, 디멘션 프로세싱 종료 후 모든 관련된 데이터가 저장되므로 추후 팩트 프로세싱이 완료될 수 있다.
입력 요구사항(Input Requirement)들과가상 오브젝트(Assumed Object)들을 정의하는 목적은 표현식 기반의 레벨 ID, 서브레벨들, 및 레벨 그룹들이 동작하는 체제를 서술하는 것이다. 전술한 전체적인 체제는, 레코드들이 레코드 프로바이더로부터 독출되며, 애그리깃 레코드들은 레벨 룰과 디테일 데이터를 근거로 "발견"되고, 애그리깃 디멘션 레코드들과 디테일 레코드들에 대한 그들의 관계가 레코드 콜렉터에 의해 저장되는, 애그리게이션을 실행하는 시스템에 있어서 전형적인 것이다. 모든 디멘션에 대하여 상기 과정이 실행된 후에, 레벨들의 크로스-프로덕트에 있는 레벨 그룹들은 팩트 프로세싱을 준비하면서 전개된다.
본 발명의 특정 실시예가 이용하는 오브젝트들은 다음과 같다:
1)표현식(Expression)
표현식 오브젝트는 표현식들을 컴파일하고 실행한다. 하나의 표현식을 생성할 때RecordDef를 보면, 어느 칼럼들이 사용가능한지를 알 수 있다.
·Expression(const RecordDef& recordDef)- 하나의 표현식을 생성하는 콘스트럭터(constructor). 레코드 정의는 표현식 내에 저장된다; 상기 칼럼들은 이 오브젝트와 함께 컴파일되는 표현식 텍스트에서 사용될 수 있다.
·void Compile(const String& exprText)- 주어진 본문을 내부의 실행가능한 포맷으로 컴파일한다.
·bool IsColumnReferenced(int i)- 레코드 정의에 있는 인덱스 i의 칼럼이 표현식에 의하여 참조되면 참값을 반환한다.
·int GetFirstColumnRef()- 이 표현식에 의하여 참조되는 제1 칼럼의 레코드 정의에서 인덱스를 얻는다.
·int GetColumnRefCount()- 이 표현식에 의하여 참조되는 서로 다른 칼럼들의 수를 얻는다. (동일 칼럼이 한번 이상 참조되더라도 1회만을 카운트한다.)
·void SetAggrEmptyValues(int index, bool yesNo)- 본 명세서에서 전술한 바와 같이, 이는 각각의 칼럼에 대하여존재(exists)비존재(not exists)연산자(operators)들이 어떻게 동작하는지를 제어한다.yesNo가 하나의 칼럼에 대해 참값으로 설정되면,exists는 엠프티 칼럼들에 대하여 참값을 반환한다.
·void Execute(Value& result, const Record* detailRecord, const Record* emptyRecord)- 표현식을 실행하고 그 결과를result에 할당한다.detailRecord는 현재의 디테일 레코드에 대한 칼럼 값(value)들을 포함한다.emptyRecord는 엠프티 필드들("N/A"와 같은)을 표시하는 값들을 포함한다.
2)LevelRuleDef
LevelRuleDef는 룰 아이템 표현식들의 리스트를 보유한다.
·const BaseLevelDef* GetLevel()- 이 레벨 룰 정의를 소유하는 레벨에 대한 포인터를 반환한다.
·void Reset()- 모든 룰 아이템들을 초기화한다.
·int GetNumRuleItem()- 룰 아이템들의 수를 반환한다.
·const String& GetRuleItem(int i)- 인덱스i에 있는 룰 아이템의 텍스트를 반환한다.
·void InsertItem(constString& rule, int i=-1)- 인덱스i에, 또는i가 지정되지 않은 경우 끝에, 주어진 룰 아이템을 삽입한다.
·void SetItem(const String& rule, int i=0)- 디폴트가 0인, 인덱스i에 룰 아이템의 텍스트를 설정한다.
·void DeleteItem(int i)- 인덱스i에서 룰 아이템을 삭제한다.
3) BaseGroupLevelDef
BaseGroupLevelDef는 그룹들을 포함하여, 모든 레벨 정의들의 기본 클래스이다. 이는 레벨의 종류를 식별하는 방법들을 포함한다.
·bool IsAggrLevel()- 애그리게이션 레벨에 대한 레벨 정의가 있으면, 참값을 반환한다.
·bool IsSubLevel()- 서브레벨에 대한 레벨 정의가 있는 참값을 반환한다.
·bool IsGroup()- 레벨 그룹에 대한 레벨 정의가 있으면 참값을 반환한다.
4)BaseLevelDef:BaseGroupLevelDef
BaseLevelDef는 룰 아이템, 이름, 및 코드를 포함하는 레벨 정의들의 기본 클래스이다.
·const String& GetLevelName()- 레벨의 이름을 반환한다.
·void SetLevelName(const String& name)- 레벨의 이름을 설정한다.
·int GetLevelCode()- 레벨 코드를 반환한다.
·void SetLevelCode(int code)- 레벨 코드를 설정한다.
·const LevelRuleDef* GetLevelRule()- 이 레벨 정의에 대한 레벨 룰의 포인터를 반환한다. 리턴 값은 읽기 전용이다.
·LevelRuleDef* GetLevelRule()- 이 레벨 정의에 대한 레벨 룰의 포인터를 반환한다. 반환받은 오브젝트는 레벨 룰 아이템들을 레벨 정의에 부가하는데 사용된다.
5)LevelDef:BaseLevelDef
LevelDef는 애그리깃 레코드들에 대한 디스크립션(discription)을 생성하는 표현식을 포함하는 레벨들의 기본 클래스이다. 이는 본 실시예 고유의 특징이다.
·const String& GetDescRule()- 디스크립션 룰의 텍스트를 반환한다.
·void SetDescRule(const String& descRule)- 디스크립션 룰의 텍스트를 설정한다.
6)AggrLevelDef:LevelDef
AggrLevelDef오브젝트는 애그리게이션 레벨 정의를 나타내고 룰 아이템 표현식, 레벨 이름, 및 레벨 코드(레벨에 대한 정수 식별자)의 텍스트를 포함한다. 이 오브젝트는 또한 그 서브레벨들의 리스트를 보유한다.
·SubLevelDef* CreateSunLevel(const String& name)- 소정의 이름을 가진 서브레벨 정의를 생성한다.
·void DeleteSubLevel(SubLevelDef*& pLevel)- 이 애그리게이션 레벨로부터 소정의 서브레벨을 제거하고, 그것을 삭제한다.
·void DeleteSubLevel(const String& name)- 이 애그리게이션 레벨로부터 소정의 이름을 가진 서브레벨을 제거하고, 그것을 삭제한다.
·bool ContainSubLevel(const SubLevelDef& sublevel)- 이 애그리게이션 레벨이 소정의 서브레벨을 포함하면 참값을 반환한다.
·void TransferSubLevel (SubLevelDef& sublevel, AggrLevelDef& newlevel)- 서브레벨을 이 애그리게이션 레벨에서new level로 이동시킨다.
·void TransferSubLevel (const String& subname, AggrLevelDef& newlevel)- 서브레벨(그 이름에 의해 식별됨)을 이 애그리게이션 레벨에서newlevel로 이동시킨다.
·int GetNumSubLevels()- 서브레벨들의 수를 반환한다.
·void GetSubLevels (vector<SubLevelDef*>& vSubLevels)- 모든 서브레벨로 하나의 벡터를 구성한다. 상기 서브레벨들은 수정될 수 있다.
·void GetSubLevels (vector<constSubLevelDef*>& vSubLevels)- 모든 서브레벨로 하나의 벡터를 구성한다. 서브레벨들은 읽기 전용이다.
7)SubLevelDef:BaseLevelDef
SubLevelDef는 하나의 서브레벨의 정의이다. 애그리게이션 레벨의 특징 외에, 이는 어느 레벨이 이를 포함하고 있는지 안다.
·const LevelDef*GetRefLevel()- 포함하는 레벨의 레벨 정의를 반환한다.
8) GroupDef:BaseGroupLevelDef
GroupDef오브젝트는 그룹에 있는 레벨들과 서브레벨들의 리스트를 보유한다.
·void AddLevel(const BaseLevelDef& level)- 레벨을 그룹에 부가한다.level매개변수는 애그리게이션 레벨 또는 서브레벨이다.
·void AddLevels(const vector<const LevelDef*>& plevels)- 레벨들의 리스트를 그룹에 부가한다.
·void AddLevels(const vector<const SubLevelDef*>& plevels)- 서브레벨들의 리스트를 그룹에 부가한다.
·void RemoveLevel(const BaseLevelDef& rlevel)- 그룹에서 소정의 레벨을 제거한다.
·void Reset()- 모든 레벨 및 서브레벨들을 그룹에서 제거한다.
·bool ContainLevel(const BaseLevelDef&r level)- 그룹이 소정의 레벨을 포함하면 참값을 반환한다.
·vector<const LevelDef*> GetLevels()- 이 그룹의 애그리게이션 레벨들을 포함하는 하나의 벡터를 반환한다.
·vector<const SubLevelDef*> GetSubLevels()- 이 그룹의 서브레벨들을 포함하는 하나의 벡터를 반환한다.
·vector<const BaseLevelDef*> GetAllLevels()- 이 그룹의 레벨 및 서브레벨들을 포함하는 하나의 벡터를 반환한다.
·vector<const LevelDef*> GetLevelsByCode()- 레벨 코드순으로, 이 그룹의 레벨 및 서브레벨들을 포함하는 하나의 벡터를 반환한다.
·bool IsEmpty()- 그룹이 레벨 및 서브레벨들을 전혀 포함하지 않으면 참값을 반환한다.
9) 크로스 프로덕트(CrossProduct)
CrossProduct오브젝트는 크로스-프로덕트 리스트에 있는 단일 엔트리에 대해, 각각의 디멘션으로부터 하나씩, 레벨 정의들의 리스트를 보유한다.
·void SetGroup(const GroupDef& rGrp)- 하나의 레벨 그룹을 크로스 프로덕트에 설정한다. 그 디멘션에 대한 이전의 모든 그룹을 삭제한다.
·void SetLevel(const BaseLevelDef& rLevel)- 하나의 레벨 또는 서브레벨 정의를 크로스 프로덕트에 설정한다. 그 디멘션에 대한 이전의 모든 정의를 삭제한다.
·void SetGroupAndLevels (const vector<const BaseGroupLevelDef*>& vObjs)- 레벨, 서브레벨, 또는 그룹 정의의 리스트를 크로스 프로덕트에 설정한다. 상기 리스트는 각각의 디멘션으로부터 하나의 정의를 포함해야 한다. 이는 기존의 모든 정의들을 교체한다.
·vector<const BaseGroupLevelDef*> GetGroupAndLevelsByDimName()- 레벨, 서브레벨, 또는 그룹 정의들의 리스를 디멘션 이름순으로 얻는다.
·vector<const BaseGroupLevelDef*> GetGroupAndLevelsByName ()- 레벨, 서브레벨, 또는 그룹 정의들의 리스트를 레벨 이름순으로 얻는다.
·void RemoveGroup(const GroupDef& rGrp)- 레벨 그룹 정의를 제거한다.
·void RemoveLevel(const BaseLevelDef& rLevel)- 하나의 레벨 또는 서브레벨 정의를 제거한다.
·bool ContainGroup(const GroupDef& rGrp)- 크로스 프로덕트가 소정의 그룹을 포함하면 참값을 반환한다.
·bool ContainLevel(const BaseLevelDef& rLvl)- 크로스 프로덕트가 소정의 레벨 또는 서브레벨을 포함하면 참값을 반환한다.
·bool operator == (const CrossProduct& inProd)- 이 크로스 프로덕트가 소정의 크로스 프로덕트와 동일할 경우 참값을 반환하는 비교 연산자이다.
·int GetSize()- 크로스 프로덕트에 있는 엔트리들의 수를 반환하며, 이는 디멘션들의 수와 동일하다.
·void Reset()- 크로스 프로덕트에서 모든 레벨 정의들을 제거한다.
10)레벨
레벨오브젝트는 식별에 필요한 정보와 프로세스 애그리게이션 레벨 및 서브레벨을 포함한다. 이것은 애그리게이션 레벨 정의 또는 서브레벨 정의 중 어느 하나가 주어지면 생성된다. 애그리게이션 레벨에서,mpSublevelRule데이터 멤버는 널이다. 서브레벨에서,myLevelRulempSublevelRule에 있는 표현식들이 모두 계산된다.
.Level (Dimension& dimension, const AggrLevelDef*pLevel)- 디멘션 및 애그리게이션 레벨 정의가 주어질 때 레벨 오브젝트를 형성하는 콘스트럭터(Constructor)이다.
.Level (Dimension& dimension, const SubLevelDef*pLevel)- 디멘션 및 서브레벨 정의가 주어질 때 레벨 오브젝트를 형성하는 콘스트럭터이다.
.Dimension& GetDimension()- 본 레벨의 디멘션을 반환한다.
.const Dimension& GetDimension()- 읽기 전용으로 본 레벨의 디멘션을 반환한다.
.const String& GetName()- 본 레벨의 이름을 구한다.
.bool IsSubLevel()- 레벨이 서브레벨 정의로부터 생성되면 참값을 반환한다.
.bool IsAggrLevel()- 레벨이 애그리게이션 레벨 정의로부터 생성되면 참값을 반환한다.
.int GetLevelCode()- 본 레벨에 대한 정수 레벨 코드를 반환한다.
.void MakeDescription(const Record& rec, String& desc)- 디스크립션 룰을 이용하여 주어진 레코드에 대한 디스크립션을 생성하고 그 디스크립션 텍스트를 desc에 위치시킨다. 상기 특징은 본 구현에 한정된다.
.bool MatchRecord(const Record& rec)- 주어진 입력 디테일 레코드가 본 레벨에 있으면 참값을 반환한다. 이 방법에서 레벨 룰은 룰 아이템 표현식을 실행함으로써 평가된다. 서브레벨에 대해, 페어런트 레벨 룰 및 서브레벨 룰은 모두 평가되어야 한다.
. void PopulateRecord(const Record& inputRec, Record& popRec)- 입력 디테일 레코드inputRec가 주어질 때, 이 방법은 애그리깃 디멘션 레코드의 속성을 포함하는 레코드를 생성한다. 하나의 칼럼이 상기 레벨 룰에 의해 참조되지 않으면 칼럼들은 NULL로 채워지고, 이때 그 칼럼은inputRec로부터 복사된다.
.bool DescRuleUsesColumn(int index)- 디스크립션 룰이 인덱스가index인 칼럼을 참조하면 참값을 반환한다.
.bool LevelRuleUsesColumn(int index)- 레벨 룰이 인덱스가index인 칼럼을 참조하면 참값을 반환한다.
레벨(Level) 오브젝트의 데이터 멤버는 다음을 포함한다:
.Dimension& mDimension- 본 레벨을 유지하는 디멘션 오브젝트에 대한 참조이다.
.const BaseLevelDef* mpLevel- 본 레벨에 대한 레벨 정의에 대한 포인터(pointer)이며, AggrLevelDef 또는 SubLevelDef가 될 수 있다.
.Expression* mpDescRule- 디스크립션을 평가하는 표현식 오브젝트에 대한 포인터이다.
.vector<Expression*>mvLevelRule- 본 레벨의 룰 아이템 표현식들에 대한 포인터의 벡터이다. 애그리게이션 레벨에 대해, 0 또는 그 이상의 룰 아이템 표현식이 있으며, 그 각각은 오직 하나의 유일한 칼럼을 참조한다. 서브레벨들에 대해, 본 데이터 멤버는 페어런트 애그리게이션 레벨로부터 얻어지는 룰 아이템 표현식으로 채워진다.
.Expression* mpSublevelRule- 서브레벨 룰을 평가하는 표현식에 대한 포인터이다. 상기 표현식은 하나 또는 그 이상의 칼럼들을 참조한다. 이는 레벨 오브젝트가 서브레벨이 아니면 NULL이다.
11)디멘션(dimension)
본 디멘션 오브젝트는 디멘션 프로세싱에 관련된 정보를 보유한다. 상기 정보는 디멘션 테이블에 대한 레코드 정의뿐만 아니라 이 디멘션에 대한 레벨 오브젝트를 포함한다.
.const RecordDef* GetSourceTable()- 소스 디멘션 테이블의 레코드 정의를 얻는다.
.int GetNumSourceColumns()- 소스 칼럼의 번호를 얻는다.
.const ColumnDef* GetSourceColumn (int i)- 주어진 인덱스i에서 소스 칼럼 정의를 얻는다.
.int GetNumAggrLevels()- 애그리게이션 레벨 및 서브레벨들의 번호를 얻는다.
.Level& GetAggrLevel (int i)- 주어진 인덱스i에서 레벨 오브젝트를 얻는다.
.const Record& GetEmptyValueRecord()- 엠프티("N/A"와 같은)로 간주되는 값들을 포함하는 레코드를 얻는다.
디멘션오브젝트의 데이터 멤버는 다음을 포함한다:
.RecordDef mSourceTableDef- 디멘션에 대한 레코드 정의이다.
.vector<Level*> mvAggrLevels- 애그리게이션 레벨 및 서브레벨을 포함하는 벡터이다.
.Record mEmptyRecord- 엠프티("N/A"와 같은)로 간주되는 값들을 포함하는 레코드이다.
레벨들의 정의를 유지하는 전용 오브젝트들의 클래스 하이어아키(class hierarchy)가 있다. 이들은 어느 애그리깃 디테일 레코드들이 그 멤버인지를 테스트하는데 이용되는 실제의 레벨 오브젝트를 형성하는 시스템에 의해 사용된다.
표현식 기반의 레벨 ID 및 서브레벨의 요지는 입력 디테일 레코드들이 어떻게 레벨들에 대해 매치(match)되는가에 있다. 이는 디멘션 프로세싱 동안 발생한다. 레벨 그룹들은 레벨의 크로스-프로덕트를 확장함으로써 디멘션 프로세싱 후에 처리된다. 다음 절은 전술한 오브젝트들이 사용되는 방법과 이들이 작용하는 방법에 대한 일부 세부사항들을 기술한다.
디멘션 프로세싱은 모든 입력 디테일 레코드들을 독출하여, 이들을 레벨들과 매치시키고, 대응 애그리깃 레코드들을 레코드 콜렉터(collector)로 보내는 하나의 루프(loop)이다. 상기 프로세스는 이하 C++ 스타일의 슈도-코드(pseudo-code)로 기술된다.
// 디메전 생성 및 파퓰레이션(population)
Dimensiondim;
// (파퓰레이션 기재되지 않음)
// 리더 생성
RecordProviderreader;
// 리더 개방
reader.Open (dim.GetSourceTable ());
// 레코드 콜렉터 생성
RecordCollectorcollector;
// 모든 레코드에 대한 루프
Record sourceRec;
intn = dim.GetNumAggrLevels ();
while (reader.ReadRecord (sourceRec) != true) {
// 각각의 레벨에 대한 루프
for (intj = 0; j < n; j++) {
// 다음 레벨 얻음
Level&level = dim.GetAggrLevel (j);
// 레코드를 레벨과 매치시킴
if (level.MatchRecord (sourceRec) == true)
{
// 하나의 애그리깃 레코드를 채움
Record aggrRec;
level.PopulateRecord (sourceRec, aggrRec);
// 데이터를 레코드 콜렉터로 보냄
collector.WriteAggregate (sourceRec, aggrRec, level);
}
}
}
// 리더 닫음
reader.Close ();
표현식 기반의 레벨 ID 및 서브레벨들에 대한 작업은 MatchRecord 방법으로 일어난다. WriteAggregate은 동일 애그리깃으로 여러 번 호출될 수 있으므로, 레코드 콜렉터는 그 리스트에서 유일한 애그리깃 레코드들을 유지해야만 한다.
하나의 레코드를 매칭시키는 것은, 이하 C++ 스타일 슈도-코드로 기술된 바와 같이, 룰 아이템 표현식을 실행하는 것을 포함한다:
bool Level::MatchRecord (const Record& rec)
{
valueval;
boolb;
// 레벨 룰 표현식 테스트
vector<Expression*>::iteratoriter = mvLevelRule.begin ();
while (iter != mvLevelRule.end ()) {
(*iter)->Execute (val, &rec,
&(mDimension.GetEmptyValueRecord ()));
val.GetValue (b);
if (b != true)
return false;
iter++;
}
// 서브레벨 룰 테스트
if (IsSubLevel ()) {
mpSublevelRule->Execute (val, &rec,
&(mDimension.GetEmptyValueRecord ()));
val.GetValue (b);
if (b != true)
return = false;
}
return true;
}
하나의 레코드를 채우는 것은, 이하 C++ 스타일 슈도-코드로 기술된 바와 같이, 레벨 룰 아이템에 의해 이용되는 칼럼들을 소스 레코드로부터 복사하는 것을포함한다:
voidLevel::PopulateRecord (constRecord&inputRec,Record&popRec)
{
// 필드들에 대한 루프
intsz = inputRec.FieldCount ();
popRec.Reset (sz);
for (inti = 0; i < sz; i ++) {
if (isColumnReferenced (i))
popRec[i] = imputRec[i];
else
popRec[i].SetNull;
}
}
상기에서 참조된 isColumnReferenced 방법은 다음과 같이 구현된다:
boolLevel::isColumnReferenced (int index)
{
vector<Expression*>::const_iteratoriter = mvLevelRule.begin();
while (iter != mvLevelRule.end()) {
if ((*iter) -> IsColumnReferenced (index))
return true;
iter++;
}
return false;
}
이것은 하나의 칼럼이 참조되는지의 여부를 확인할 수 있는 표현식의 기능을 이용한다.
디테일 및 애그리깃 디멘션 레코드들은 RecordCollector에 의해 수집된다. 전술한 바와 같이, 레코드 콜렉터는 디멘션 프로세싱으로부터 얻어지는 정보로 무엇을 하는지를 "인식(knowing)"해야 한다. 상기 레코드 콜렉터는 정의된 레벨들을 근거로 주어진 디테일 레코드들에 대해 어느 애그리깃 레코드들이 존재하는지에 대한 정보를 수신한다. 또한, 상기 콜렉터는 디테일 레코드들이 어느 애그리깃 레코드들과 "조화"를 이루는지에 관한 정보를 수신한다. 이러한 모든 정보는, 애그리깃들이 실제로 생성될 때, 팩트 프로세싱(fact processing)의 나중 단계시 사용된다.
레벨들의 크로스-프로덕트를 확장하는 프로세스는 매우 간단하다. 하나의 레벨 그룹을 접할 때마다, 모든 조합들은 하나의 큰 루프 내에서 형성된다. 전체 프로세스에 대한 슈도-코드는 다음과 같다:
For each entry in the cross-product of levels {
엔트리를 그룹이 없는 엔트리들의 리스트로 전개한다;
For each entry in the expanded list {
If the entry is unique
엔트리를 타겟 크로스-프로덕트에 더한다;
}
}
하나의 단일 크로스-프로덕트 엔트리내에서 레벨 그룹들을 확장하는 슈도-코드는 다음과 같다:
Expand (SourceEntry,TargetList) {
// SourceEntry는 레벨들에 대한 포인터들의 벡터인 소스 크로스-프로덕트 엔트리이다.
// TargetList는 (레벨들에 대한 포인터들의 벡터)의 벡터인 타겟 크로스-프로덕트 엔트리이다.
TargetList를 초기화 한다;
하나의 블랭크 엔트리를TargetList에 더한다;
For each dimensionD{
디멘션D에 대한 레벨의 인덱스I를 구한다;
If theSourceEntry[I]is a group {
TargetList의 크기S를 구한다;
그룹SourceEntry[I]에 있는 레벨N의 수를 구한다;
IfNis Zero {
TargetList로부터 모든 엔트리를 제거한다;
Return;
}
TargetListN배 크게 한다;
For valuesJfrom0thN - 1{
그룹SourceEntry[I]로부터J번째 레벨L을 구한다;
For valuesKfrom0toS - 1{
TargetList[J*S+K] =TargetList[K];
TargetList[J*S+K][I] =L;
}
}
}
Else {
TargetList의 크기S를 구한다;
For valuesKfrom0toS - 1{
TargetList[K][I] =SourceEntry[I];
}
}
}
}
상기 프로세스는 간단한 예에 의해 명백해진다. 3개의 디멘션과 {L1, G1, G2}와 같은 하나의 크로스 프로덕트가 있다고 가정한다. 여기서 L1은 하나의 레벨이고, G1은 레벨 L2및 L3을 포함하는 하나의 그룹이며, G2는 레벨 L4및 L5를 포함하는 하나의 그룹이다. (주: 굵은 영역은 부가된 엔트리들을 나타내며; 굵은 글씨체는 부가된 레벨들을 나타낸다.)
제1 디멘션에 대한 루핑후, 타겟 리스트는 다음을 포함한다:
L 1 블랭크 블랭크
제2 디멘션 후, 타겟 리스트는 다음을 포함한다:
L1 L 2 블랭크
L1 L 3 블랭크
또한, 제3 디멘션 후, 타겟 리스트는 최종의 완전히 확장된 크로스-프로덕트 리스트를 포함한다:
L1 L2 L 4
L1 L3 L 4
L1 L2 L 5
L1 L3 L 5
본래의 크로스-프로덕트 리스트에 있는 모든 엔트리들이 확장된 후, 이들은 최종 타겟 리스트에 병합된다(그러나 유일한 엔트리들은 유지된다).
본 명세서에 기술된 상기 기술은 데이터 웨어하우스에 대한 애그리깃 데이터를 선택하는 매우 융통성 있고 강력한 방법을 제공하는 장점이 있고, 또한 구현이 용이하다.
표현식 기반의 레벨 ID는 사용자들로 하여금 집계에 실제로 필요한 데이터를 용이하고 융통성있게 선택하게 함으로써 대용량 데이터 웨어하우스와 관련된 문제들을 해결한다.
서브레벨들은 사용자들로 하여금 속성들이 유도되어야 하는 레벨들을 선택할 수 있게 한다: 이는 애그리깃이 소스 데이터에 없을 때 또는 복잡하거나 애그리게이션 기준의 변경이 요구될 때 도움이 된다.
레벨 그룹들은 사용자들로 하여금 관련 레벨들의 그룹을 형성하고 실질적으로 보다 짧은 크로스-프로덕트 리스트를 처리하게 함으로써 레벨들의 크로스-프로덕트 선택을 훨씬 단순화시킨다.
이하 본 바람직한 표현식 언어의 일부 특징 및 일부 구현의 주석을 상술한다. 이 섹션은 본 바람직한 표현식에서 허용되는 모든 연산들을 열거한다. 레벨 또는 서브레벨 룰의 기능을 향상시키기 위해 추가적인 연산들이 지원될 수 있다.
비교 연산:
이들 연산은 2개의 피연산자가 필요하다. 이들은 2개의 피연산자를 비교하고, 조건이 참인지 거짓인지를 평가하고, 그 결과인 불(bool) 값을 반환한다. 비교되는 2개의 피연산자는 비교 데이터형이어야 한다.
연산자 설명
=,eq 같다
<>, ne 같지 않다
>, gt 크다
>=, ge 크거나 같다
<, lt 작다
<=, le 작거나 같다
수치 연산:
이들 연산은 연산자에 따라 하나 또는 2개의 피연산자가 필요하다. 이들은 계산을 하고 그 결과인 수치 값을 반환한다.
연산자 설명
add 2 피연산자의 수치를 더한다.
sub 좌측(제1) 피연산자로부터 우측(제2) 피연산자를 차감한다.
Mult 2 피연산자의 수치를 곱한다.
Div 좌측(제1) 피연산자를 우측(제2) 피연산자로 나눈다.
Idiv 좌측(제1) 피연산자를 우측(제2) 피연산자로 나누어 정수를 취한다.
Imod 좌측(제1) 피연산자를 우측(제2) 피연산자로 나눈 나머지를 반환한다.
Abs 수치 피연산자의 절대값을 반환한다.
Neg 수치 피연산자의 값의 음수를 취한다.
Trunc 수치 피연산자의 값을 절사한다.
문자열 처리 연산:
이들 연산은 하나의 문자열 피연산자에 대한 서로 다른 종류의 문자열 처리를 행한다. 이들은 또한 상기 작업을 실행하기 위해 다른 피연산자를 취한다. 이하 그 연산의 목록을 나열한다.
연산자 피연산자 설명
substr index,count,string string의 서브스트링을 index에서 시작하여 count 문자만큼 반환한다.
Concat string1,string2 string1과 string2를 병합하여 그 결과 값을 반환한다.
Toupper,tolower string string을 모두 대문자 또는 소문자로 각각 변환한다.
parsenumber string,formatString formatString에서 명시된 포맷을 이용하여 string을 분해하여 결과 수치를 반환한다.
Parsedate string,formatString formatString에서 명시된 포맷을 이용하여 string을 분해하여 결과 날짜를 반환한다.
Leftpad,rightpad string,padchar,count padchar 문자를 이용하여 string의 우측 또는 좌측을 count 횟수만큼 반복적으로 채운다.
Trimleft,trimright,trimboth string string에서 앞, 뒤, 또는 앞과 뒤에서 스페이스 문자들을 각각 제거한다.
Insert string,insertString,index index 위치에서 insertString을 string에 삽입한다.
Delete string,index,count index 위치에서 시작되는 문자열의 count 수만큼 string에서 삭제한다.
Replace string,searchString,replaceString,count string에서 searchString 패턴을 검색하여 이를 count 횟수만큼 replaceString으로 대체한다. count가 -1이면, 모든 문자열을 replaceString으로 대체한다.
Length string string의 길이를 구한다.
Char charCode 수치 charCode 유니코드를 유니코드 문자만을 포함하는 스트링으로 변환한다.
날짜 연산:
이들 연산은 서로 다른 종류의 날짜 연산 및 날짜 변환을 실행한다.
연산자 피연산자 설명
now N/A 현재의 날짜와 시간을 포함하는 datetime값을 반환한다.
Date year,month,day 소정의 년,월,일을 포함하는 datetime값을 구성하여 반환한다. 시간은 모두 0으로 설정된다.
Datetime year,month,day,hour,minute,second 소정의 년,월,일,시,분,초를 포함하는 datetime 값을 구성하여 반환한다.
Year,month,day,hour,minute,second dateTime dateTime 값으로부터 년,월,일,시,분, 또는 초성분을 각각 추출하여 반환한다.
Diffyears,diffmonths,diffdays,diffhours,diffminutes,diffseconds dateTime1,dateTime2 dataTime1과 dateTime2 사이의 년,월,일,시,분 또는 초의 차를 각각 계산하여 반환한다.
Dayofweek dateTime dateTime 값에 대한 요일을 계산하여 반환한다.
Dayofyear dateTime dateTime 값에 대한 연월일을 계산하여 반환한다.
Daysleftinyear dateTime dateTime에 명시된 년도에서 남은 일수를 계산하여 반환한다.
포맷(format) 연산:
이 연산자들은 스트링, 데이트타임, 및 숫자 값들을 문자열로 포맷한다. 이들은 하나의 포맷 스트링을 기초로 값들을 포맷한다. 따라서, 표현식 시스템은 값들을 포맷하기 위해 포맷 스트링의 구문(syntax)을 이해해야 한다.
연산자 피연산자 설명
formatchar string,formatString formatString에 명시된 포맷을 이용하여 string을 포맷한다.
Formatdate dateTime,formatString formatString에 명시된 포맷을 이용하여 dateTime값을 하나의 문자열로 변환 및 포맷한다.
Formatnumber number,formatString formatString에 명시된 포맷을 이용하여 숫자 값을 하나의 문자열로 변환 및 포맷한다
논리 연산자:
3개의 공통적으로 사용되는 논리 연산자: and, or, not이 지원된다. 이들 모두는 불(bool) 피연산자를 취하고 그 결과로 불 값을 반환한다.
상수값:
3개의 특별한 상수값: 참(true), 거짓(false), 및 널(NULL)이 지원된다. 참 또는 거짓 상수값은 불 표현식에서 사용된다. 널값은 널 칼럼(또는 필드)값을 가리키기 위한 것이다.
레지스터:
레지스터 또는 변수들을 사용할 수 있다. 각각 하나의 이름이 부여된다. 할당(assign) 연산자만이 레지스터내의 값을 수정할 수 있다. 레지스터들은 임의 데이터형의 임시값을 보유하는데 사용될 수 있고 임의의 적절한 연산에 사용될 수 있다.
각각의 디멘션에 행해지는 연산들은 독립이므로, 디멘션 프로세싱의 복수 인스턴스는 동시에 복수 또는 모든 디멘션들을 처리하기 위해 병렬(각각의 디멘션마다 하나씩)로 실행될 수 있다.
본 바람직한 실시예에서, RPN 표현식들은 레벨 및 서브레벨 룰을 표현하는데 이용된다. 다른 표현식 언어들이 쉽게 대용될 수 있다.
본 발명의 바람직한 실시예를 나타내고 기술하였지만, 본 발명의 정신을 벗어나지 않고 변화 및 변경들이 이루어질 수 있음은 당업자에게 자명하며, 본 발명의 범위는 첨부된 청구항에 의해 정의된다.
본 발명은 데이터 웨어하우스(data warehouse)에서 발생하는 애그리깃(aggregate)을 선택하는 방법에 관한 것이다.

Claims (6)

  1. 하나의 데이터베이스 내에 있는 디테일 데이터 엔트리들의 그룹들에 대응하는 적어도 하나의 디멘션에서 하나의 애그리깃 레벨을 정의하는 방법으로서, 상기 디멘션 디테일 엔트리들은 상기 디멘션에 있는 엔티티들의 집합을 나타내며, 각각의 디멘션 디테일 엔트리는 적어도 하나의 속성 필드를 포함하며, 상기 속성 필드들에 저장되는 값들은 각각의 상기 엔티티들에 공통된 속성의 값들이고,
    상기 레벨이, 적어도 하나의 속성들 중 하나의 속성값에 각각 대응하고, 레벨 멤버와 동일한 속성값들로 상기 디멘션에 있는 적어도 하나의 디테일 엔트리와 각각 관련되는 적어도 하나의 멤버를 포함하도록, 상기 레벨과 관련되는 상기 디멘션에 있는 적어도 하나의 속성을 레벨 룰로서 명시하는 단계를 포함하고;
    적어도 하나의 상기 룰들은 상기 레벨 정의에 포함되는 속성의 속성값들에 종속되는 논리 표현식을 포함하고 상기 논리 표현식을 만족시키는 속성 값들을 나타내는 레벨 멤버들이 그 레벨에 있는지의 여부를 결정하며;
    이에 의해, 집계되는 상기 데이터베이스에 있는 데이터가 상기 레벨 룰에 포함되는 속성들의 값들을 근거로 그룹이 형성될 수 있고, 소정의 데이터 엔트리가 상기 레벨 룰과 관련된 논리 표현식을 만족시키는지의 여부를 근거로 해당 그룹에 기여하는지의 여부에 대한 결정이 이루어질 수 있는, 애그리깃 레벨을 정의하는 방법.
  2. 하나의 데이터베이스 내에 있는 디테일 데이터 엔트리들의 그룹들에 대응하는 적어도 하나의 디멘션에서 하나의 애그리깃 서브레벨을 정의하는 방법으로서, 상기 디멘션 디테일 엔트리들은 상기 디멘션에 있는 엔티티들의 집합을 나타내며, 각각의 디멘션 디테일 엔트리는 적어도 하나의 속성 필드를 포함하며, 상기 속성 필드들에 저장되는 값들은 각각의 상기 엔티티들에 공통된 속성의 값들이며, 상기 데이터베이스는 상기 디멘션에 있는 디테일 엔트리와 각각 관련되는 팩트 데이터 엔트리들을 포함하고,
    상기 레벨이, 적어도 하나의 속성들 중 하나의 속성값에 각각 대응하고, 레벨 멤버와 동일한 속성값들로 상기 디멘션에 있는 적어도 하나의 디테일 엔트리와 각각 관련되는 적어도 하나의 멤버를 포함하도록, 상기 레벨과 관련되는 상기 디멘션에 있는 적어도 하나의 속성을 명시함으로써 하나의 레벨을 정의하는 단계; 및
    서브레벨에 있는 레벨 멤버들은 레벨에 있는 레벨 멤버들의 서브셋(subset)이 되고, 상기 서브레벨에 있는 각각의 멤버는 상기 레벨에 있는 대응 레벨 멤버의 디테일 엔트리들의 서브셋과 관련되도록, 상기 디멘션에 있는 각각의 디테일 엔트리가 상기 레벨에 기여하는 디테일 엔트리들의 서브셋을 정의함으로써 상기 서브레벨을 형성하는 것을 만족하거나 만족하지 않을 수 있는 논리 표현식을 명시하는 단계를 포함하고,
    이에 의해, 상기 서브레벨은 하나의 레벨로서 작용하지만, 상기 데이터베이스에 있는 팩트 데이터 엔트리들이 애그리게이션 동안 서브레벨의 멤버들에 기여하는 것을 제어하는 기능을 더 제공하는, 하나의 디멘션에 대한 애그리깃 서브레벨을정의하는 방법.
  3. 제2항에 있어서, 하나의 디멘션에 있는 각각의 상기 레벨들은 룰들의 집합에 의해 정의되고, 각각의 룰은 상기 레벨이 그룹으로 형성되는 상기 디멘션의 일 속성을 명시하는, 애그리깃 서브레벨을 정의하는 방법.
  4. 제2항에 있어서, 하나의 디멘션에 있는 상기 각각의 서브레벨들은 그 디멘션에 있는 어느 디테일 엔트리들이 그 서브레벨에 있는 레벨 멤버들과 관련되는지를 정의하는 조건들을 명시하는 적어도 하나의 룰에 의해 정의되는, 애그리깃 서브레벨을 정의하는 방법.
  5. 제4항에 있어서, 상기 룰은 상기 디테일 엔트리들의 필드 값들에 의존하는 조건들을 명시하는, 애그리깃 서브레벨을 정의하는 방법.
  6. 하나의 데이터베이스에 있는 팩트 데이터 엔트리들을 포함하는 입력 팩트 데이터를 집계하는데 사용되는 레벨들의 복수의 크로스 프로덕트들을 정의하는 방법으로서, 상기 데이터베이스는 엔티티들의 집합을 표현하고 디멘션 디테일 엔트리들을 각각 포함하는 복수의 디멘션들을 포함하며; 각각의 디멘션 디테일 엔트리는 적어도 하나의 속성 필드를 포함하고, 상기 속성 필드들에 저장되는 값들은 상기 엔티티들의 각각에 공통되는 속성의 값들이며; 상기 레벨이, 적어도 하나의 속성들중 하나의 속성값에 각각 대응하고, 레벨 멤버를 정의하는 동일한 속성값들로 상기 디멘션에 있는 적어도 하나의 디테일 엔트리와 각각 관련되는 적어도 하나의 멤버를 포함하도록, 상기 레벨과 관련되는 상기 디멘션에 있는 적어도 하나의 속성을 명시함으로써 상기 레벨들이 각각의 상기 디멘션에서 정의되고;
    하나의 레벨 그룹으로서 상기 디멘션들중 하나에 있는 적어도 2개의 상기 레벨들을 나타내는 단계;
    적어도 하나가 레벨 그룹 크로스-프로덕트를 정의하는 레벨 그룹인, 상기 디멘션들 중 각각으로부터 많아야 하나인 레벨 또는 레벨 그룹을 선택하는 단계; 및
    크로스 프로덕트의 레벨 그룹들에 있는 레벨들의 모든 조합에 대해 하나의 레벨 크로스 프로덕트를 생성하고, 생성된 각각의 레벨 크로스 프로덕트는 상기 레벨 그룹 크로스 프로덕트에 있는 각각의 레벨 그룹으로부터 하나의 레벨을 통합하고 또한 하나의 레벨 그룹을 포함하지 않는 상기 레벨 크로스 프로덕트에 있는 임의의 레벨들을 통합함으로써, 상기 레벨 그룹 크로스 프로덕트를 상기 복수의 레벨 크로스 프로덕트로 변환하는 단계를 포함하고;
    이에 의해, 상기 데이터베이스의 사용자는, 하나의 디멘션에 있는 제1 레벨을 포함하는 레벨 크로스 프로덕트들의 제1 세트, 및 상기 제1 레벨을 상기 디멘션에 있는 제2 레벨로 치환하는 점을 제외하고는 동일한 레벨 크로스 프로덕트들의 제2 세트를, 양자 모두 명시적으로 정의하지 않고 생성할 수 있는, 복수의 크로스 프로덕트들을 정의하는 방법.
KR1020017000926A 1999-05-24 2000-05-19 데이터 웨어하우스에 대한 애그리깃 레벨 및 크로스프로덕트 레벨을 선택하는 방법 및 장치 KR20010072019A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/317247 1999-05-24
US09/317,247 US6163774A (en) 1999-05-24 1999-05-24 Method and apparatus for simplified and flexible selection of aggregate and cross product levels for a data warehouse
PCT/US2000/014099 WO2000072201A1 (en) 1999-05-24 2000-05-19 Method and apparatus for selecting aggregate levels and cross product levels for a data warehouse

Publications (1)

Publication Number Publication Date
KR20010072019A true KR20010072019A (ko) 2001-07-31

Family

ID=23232791

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020017000926A KR20010072019A (ko) 1999-05-24 2000-05-19 데이터 웨어하우스에 대한 애그리깃 레벨 및 크로스프로덕트 레벨을 선택하는 방법 및 장치

Country Status (14)

Country Link
US (1) US6163774A (ko)
EP (1) EP1131744B1 (ko)
JP (1) JP2003500748A (ko)
KR (1) KR20010072019A (ko)
CN (1) CN1144145C (ko)
AT (1) ATE459926T1 (ko)
AU (1) AU780565B2 (ko)
BR (1) BR0006145A (ko)
CA (1) CA2337519C (ko)
DE (1) DE60043925D1 (ko)
HK (1) HK1042346A1 (ko)
IL (1) IL140867A (ko)
WO (1) WO2000072201A1 (ko)
ZA (1) ZA200100522B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100848264B1 (ko) * 2006-11-23 2008-07-25 연세대학교 산학협력단 강교량의 데이터베이스 구축방법

Families Citing this family (135)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6073134A (en) * 1997-05-29 2000-06-06 Oracle Corporation Method article of manufacture, and apparatus for generating a multi-dimensional record management index
US6442554B1 (en) * 1999-01-29 2002-08-27 I2 Technologies Us, Inc. System and method for generating dependent data
US6356214B1 (en) 1999-02-02 2002-03-12 Cisco Technology, Inc. Fast look-up table based scheme for NRZI encoding/decoding and zero insertion/removal in serial bit streams
US6567796B1 (en) 1999-03-23 2003-05-20 Microstrategy, Incorporated System and method for management of an automatic OLAP report broadcast system
US8321411B2 (en) 1999-03-23 2012-11-27 Microstrategy, Incorporated System and method for management of an automatic OLAP report broadcast system
US8607138B2 (en) 1999-05-28 2013-12-10 Microstrategy, Incorporated System and method for OLAP report generation with spreadsheet report within the network user interface
US9208213B2 (en) 1999-05-28 2015-12-08 Microstrategy, Incorporated System and method for network user interface OLAP report formatting
US6385604B1 (en) 1999-08-04 2002-05-07 Hyperroll, Israel Limited Relational database management system having integrated non-relational multi-dimensional data store of aggregated data elements
US6408292B1 (en) 1999-08-04 2002-06-18 Hyperroll, Israel, Ltd. Method of and system for managing multi-dimensional databases using modular-arithmetic based address data mapping processes on integer-encoded business dimensions
US6829334B1 (en) 1999-09-13 2004-12-07 Microstrategy, Incorporated System and method for the creation and automatic deployment of personalized, dynamic and interactive voice services, with telephone-based service utilization and control
US6964012B1 (en) 1999-09-13 2005-11-08 Microstrategy, Incorporated System and method for the creation and automatic deployment of personalized, dynamic and interactive voice services, including deployment through personalized broadcasts
US6768788B1 (en) 1999-09-13 2004-07-27 Microstrategy, Incorporated System and method for real-time, personalized, dynamic, interactive voice services for property-related information
US8130918B1 (en) 1999-09-13 2012-03-06 Microstrategy, Incorporated System and method for the creation and automatic deployment of personalized, dynamic and interactive voice services, with closed loop transaction processing
US6836537B1 (en) 1999-09-13 2004-12-28 Microstrategy Incorporated System and method for real-time, personalized, dynamic, interactive voice services for information related to existing travel schedule
US6484179B1 (en) 1999-10-25 2002-11-19 Oracle Corporation Storing multidimensional data in a relational database management system
US7107284B1 (en) * 1999-12-28 2006-09-12 Ncr Corporation Method of generating user customized document incorporating at least a portion of discovery information recorded in the system of record database in data warehouse environment
US20020029207A1 (en) * 2000-02-28 2002-03-07 Hyperroll, Inc. Data aggregation server for managing a multi-dimensional database and database management system having data aggregation server integrated therein
US6768986B2 (en) * 2000-04-03 2004-07-27 Business Objects, S.A. Mapping of an RDBMS schema onto a multidimensional data model
AU2001257077A1 (en) * 2000-04-17 2001-10-30 Brio Technology, Inc. Analytical server including metrics engine
US7072897B2 (en) * 2000-04-27 2006-07-04 Hyperion Solutions Corporation Non-additive measures and metric calculation
US7167859B2 (en) * 2000-04-27 2007-01-23 Hyperion Solutions Corporation Database security
US6941311B2 (en) * 2000-04-27 2005-09-06 Hyperion Solutions Corporation Aggregate navigation system
US6748394B2 (en) 2000-04-27 2004-06-08 Hyperion Solutions Corporation Graphical user interface for relational database
US6732115B2 (en) 2000-04-27 2004-05-04 Hyperion Solutions Corporation Chameleon measure and metric calculation
US7080090B2 (en) * 2000-04-27 2006-07-18 Hyperion Solutions Corporation Allocation measures and metric calculations in star schema multi-dimensional data warehouse
US20020049711A1 (en) * 2000-05-05 2002-04-25 Davenport Daniel M. Method and system for accessing data in a database warehouse
US6957214B2 (en) * 2000-06-23 2005-10-18 The Johns Hopkins University Architecture for distributed database information access
US7043457B1 (en) 2000-06-28 2006-05-09 Probuild, Inc. System and method for managing and evaluating network commodities purchasing
US6721749B1 (en) * 2000-07-06 2004-04-13 Microsoft Corporation Populating a data warehouse using a pipeline approach
US7165065B1 (en) * 2000-07-14 2007-01-16 Oracle Corporation Multidimensional database storage and retrieval system
US20020049792A1 (en) * 2000-09-01 2002-04-25 David Wilcox Conceptual content delivery system, method and computer program product
US20020083072A1 (en) * 2000-12-22 2002-06-27 Steuart Stacy Rhea System, method and software application for incorporating data from unintegrated applications within a central database
US6842753B2 (en) * 2001-01-12 2005-01-11 Microsoft Corporation Sampling for aggregation queries
US6954760B2 (en) * 2001-02-01 2005-10-11 Hitachi, Ltd. Method and system for multidimensional database management
US20020161778A1 (en) * 2001-02-24 2002-10-31 Core Integration Partners, Inc. Method and system of data warehousing and building business intelligence using a data storage model
WO2002075598A1 (en) * 2001-03-19 2002-09-26 Exie As Methods and system for handling mulitple dimensions in relational databases
US6988104B2 (en) 2001-04-02 2006-01-17 I2 Technologies U.S., Inc. System and method for allocating data in a hierarchical organization of data
US6606621B2 (en) * 2001-05-30 2003-08-12 Oracle International Corp. Methods and apparatus for aggregating sparse data
US6643653B1 (en) * 2001-06-01 2003-11-04 Oracle International Corporation Method and apparatus for identifying a data sequence related to a given data sequence
US20020184043A1 (en) * 2001-06-04 2002-12-05 Egidio Lavorgna Systems and methods for managing business metrics
US6873994B2 (en) 2001-08-31 2005-03-29 I2 Technologies Us, Inc. Conflict detection and resolution in association with data allocation
US6738762B1 (en) 2001-11-26 2004-05-18 At&T Corp. Multidimensional substring selectivity estimation using set hashing of cross-counts
US6871198B2 (en) 2001-12-21 2005-03-22 Requisite Technology, Inc. Composing and cataloging item configuration data
US7720795B2 (en) 2002-02-05 2010-05-18 General Electric Company Digital cockpit
US20070226155A1 (en) * 2002-03-29 2007-09-27 Jai-Jein Yu Extended attribute-based pricing system and method
US7366730B2 (en) 2002-04-26 2008-04-29 Oracle International Corporation Registration of solved cubes within a relational database management system
US8868544B2 (en) * 2002-04-26 2014-10-21 Oracle International Corporation Using relational structures to create and support a cube within a relational database system
US7415457B2 (en) * 2002-04-26 2008-08-19 Oracle International Corporation Using a cache to provide cursor isolation
US7171427B2 (en) * 2002-04-26 2007-01-30 Oracle International Corporation Methods of navigating a cube that is implemented as a relational object
US8001112B2 (en) * 2002-05-10 2011-08-16 Oracle International Corporation Using multidimensional access as surrogate for run-time hash table
US20040181518A1 (en) * 2003-03-14 2004-09-16 Mayo Bryan Edward System and method for an OLAP engine having dynamic disaggregation
US8209280B2 (en) * 2003-05-07 2012-06-26 Oracle International Corporation Exposing multidimensional calculations through a relational database server
US8612421B2 (en) 2003-05-07 2013-12-17 Oracle International Corporation Efficient processing of relational joins of multidimensional data
US8200612B2 (en) * 2003-05-07 2012-06-12 Oracle International Corporation Efficient SQL access to multidimensional data
US7117218B2 (en) * 2003-06-26 2006-10-03 Microsoft Corporation System and method for expressing and calculating a relationship between measures
US8200775B2 (en) 2005-02-01 2012-06-12 Newsilike Media Group, Inc Enhanced syndication
US7225195B2 (en) * 2003-08-27 2007-05-29 Gil Avrahami Method for a dynamic information messaging system
CN102982065B (zh) 2003-09-15 2016-09-21 起元科技有限公司 数据处理方法、数据处理装置及计算机可读存储介质
US7949639B2 (en) * 2004-02-20 2011-05-24 Symphonyiri Group, Inc. Attribute segments and data table bias reduction
US10325272B2 (en) * 2004-02-20 2019-06-18 Information Resources, Inc. Bias reduction using data fusion of household panel data and transaction data
US8572221B2 (en) 2004-05-26 2013-10-29 Facebook, Inc. System and method for managing an online social network
US20060149739A1 (en) * 2004-05-28 2006-07-06 Metadata, Llc Data security in a semantic data model
US7076493B2 (en) * 2004-05-28 2006-07-11 Metadata, Llc Defining a data dependency path through a body of related data
US7415487B2 (en) * 2004-12-17 2008-08-19 Amazon Technologies, Inc. Apparatus and method for data warehousing
US8140482B2 (en) 2007-09-19 2012-03-20 Moore James F Using RSS archives
US9202084B2 (en) 2006-02-01 2015-12-01 Newsilike Media Group, Inc. Security facility for maintaining health care data pools
CN100393044C (zh) * 2005-06-20 2008-06-04 南京大学 一种基于ip掩码技术的属性值聚集方法
US8306986B2 (en) * 2005-09-30 2012-11-06 American Express Travel Related Services Company, Inc. Method, system, and computer program product for linking customer information
US20070124316A1 (en) * 2005-11-29 2007-05-31 Chan John Y M Attribute selection for collaborative groupware documents using a multi-dimensional matrix
CN101542478B (zh) * 2006-06-26 2012-07-18 尼尔森(美国)有限公司 提高数据仓库性能的方法和装置
US7831617B2 (en) * 2006-07-25 2010-11-09 Microsoft Corporation Re-categorization of aggregate data as detail data and automated re-categorization based on data usage context
US20080052162A1 (en) * 2006-07-27 2008-02-28 Wood Charles B Calendar-Based Advertising
US9262503B2 (en) 2007-01-26 2016-02-16 Information Resources, Inc. Similarity matching of products based on multiple classification schemes
US8504598B2 (en) * 2007-01-26 2013-08-06 Information Resources, Inc. Data perturbation of non-unique values
EP2111593A2 (en) * 2007-01-26 2009-10-28 Information Resources, Inc. Analytic platform
US20090006309A1 (en) 2007-01-26 2009-01-01 Herbert Dennis Hunt Cluster processing of an aggregated dataset
US20080263000A1 (en) * 2007-01-26 2008-10-23 John Randall West Utilizing aggregated data
US8160984B2 (en) 2007-01-26 2012-04-17 Symphonyiri Group, Inc. Similarity matching of a competitor's products
US20080294996A1 (en) * 2007-01-31 2008-11-27 Herbert Dennis Hunt Customized retailer portal within an analytic platform
US20080208735A1 (en) * 2007-02-22 2008-08-28 American Expresstravel Related Services Company, Inc., A New York Corporation Method, System, and Computer Program Product for Managing Business Customer Contacts
US20080301016A1 (en) * 2007-05-30 2008-12-04 American Express Travel Related Services Company, Inc. General Counsel's Office Method, System, and Computer Program Product for Customer Linking and Identification Capability for Institutions
US8060502B2 (en) 2007-10-04 2011-11-15 American Express Travel Related Services Company, Inc. Methods, systems, and computer program products for generating data quality indicators for relationships in a database
US8244667B1 (en) * 2007-10-18 2012-08-14 Google Inc. Querying multidimensional data with independent fact and dimension pipelines combined at query time
US8181155B2 (en) 2008-02-29 2012-05-15 Microsoft Corporation Unified expression and location framework
WO2009120617A2 (en) * 2008-03-24 2009-10-01 Jda Software, Inc. Linking discrete dimensions to enhance dimensional analysis
US7916295B2 (en) * 2008-09-03 2011-03-29 Macronix International Co., Ltd. Alignment mark and method of getting position reference for wafer
US8369523B2 (en) 2009-11-24 2013-02-05 International Business Machines Corporation Surrogate key generation using cryptographic hashing
CN101944116B (zh) * 2010-09-20 2013-01-16 常州伊冉科技有限公司 一种数据仓库中复杂多维层次的连接和聚集方法
KR101889120B1 (ko) 2011-01-28 2018-08-16 아브 이니티오 테크놀로지 엘엘시 데이터 패턴 정보 생성
US8676772B2 (en) 2011-12-09 2014-03-18 Telduráðgevin Sp/f Systems and methods for improving database performance
US10235441B1 (en) * 2012-06-29 2019-03-19 Open Text Corporation Methods and systems for multi-dimensional aggregation using composition
US10169442B1 (en) * 2012-06-29 2019-01-01 Open Text Corporation Methods and systems for multi-dimensional aggregation using composition
US9886460B2 (en) * 2012-09-12 2018-02-06 International Business Machines Corporation Tuple reduction for hierarchies of a dimension
US20150242867A1 (en) * 2012-09-25 2015-08-27 Vizdynamics Pty Ltd System and method for processing digital traffic metrics
KR102129643B1 (ko) 2012-10-22 2020-07-02 아브 이니티오 테크놀로지 엘엘시 소스 추적으로 데이터 프로파일링
US9430453B1 (en) 2012-12-19 2016-08-30 Emc Corporation Multi-page document recognition in document capture
US9892026B2 (en) * 2013-02-01 2018-02-13 Ab Initio Technology Llc Data records selection
US9390162B2 (en) * 2013-04-25 2016-07-12 International Business Machines Corporation Management of a database system
US20140330691A1 (en) * 2013-05-01 2014-11-06 Life Dreams, Inc. Devices, methods and systems related to automation that provides financial planning advice
US11487732B2 (en) 2014-01-16 2022-11-01 Ab Initio Technology Llc Database key identification
US9971798B2 (en) 2014-03-07 2018-05-15 Ab Initio Technology Llc Managing data profiling operations related to data type
US10459892B2 (en) 2014-04-23 2019-10-29 Qumulo, Inc. Filesystem hierarchical aggregate metrics
US11132336B2 (en) * 2015-01-12 2021-09-28 Qumulo, Inc. Filesystem hierarchical capacity quantity and aggregate metrics
US9836480B2 (en) 2015-01-12 2017-12-05 Qumulo, Inc. Filesystem capacity and performance metrics and visualizations
US10095729B2 (en) 2016-12-09 2018-10-09 Qumulo, Inc. Managing storage quotas in a shared storage system
US10346398B2 (en) * 2017-03-07 2019-07-09 International Business Machines Corporation Grouping in analytical databases
US10318401B2 (en) 2017-04-20 2019-06-11 Qumulo, Inc. Triggering the increased collection and distribution of monitoring information in a distributed processing system
US11068540B2 (en) 2018-01-25 2021-07-20 Ab Initio Technology Llc Techniques for integrating validation results in data profiling and related systems and methods
US11360936B2 (en) 2018-06-08 2022-06-14 Qumulo, Inc. Managing per object snapshot coverage in filesystems
US10534758B1 (en) 2018-12-20 2020-01-14 Qumulo, Inc. File system cache tiers
US10614033B1 (en) 2019-01-30 2020-04-07 Qumulo, Inc. Client aware pre-fetch policy scoring system
US11151092B2 (en) 2019-01-30 2021-10-19 Qumulo, Inc. Data replication in distributed file systems
US10725977B1 (en) 2019-10-21 2020-07-28 Qumulo, Inc. Managing file system state during replication jobs
US10795796B1 (en) 2020-01-24 2020-10-06 Qumulo, Inc. Predictive performance analysis for file systems
US10860372B1 (en) 2020-01-24 2020-12-08 Qumulo, Inc. Managing throughput fairness and quality of service in file systems
US11151001B2 (en) 2020-01-28 2021-10-19 Qumulo, Inc. Recovery checkpoints for distributed file systems
US10860414B1 (en) 2020-01-31 2020-12-08 Qumulo, Inc. Change notification in distributed file systems
US10936538B1 (en) 2020-03-30 2021-03-02 Qumulo, Inc. Fair sampling of alternate data stream metrics for file systems
US10936551B1 (en) 2020-03-30 2021-03-02 Qumulo, Inc. Aggregating alternate data stream metrics for file systems
US11775481B2 (en) 2020-09-30 2023-10-03 Qumulo, Inc. User interfaces for managing distributed file systems
US11675764B2 (en) * 2020-10-16 2023-06-13 Salesforce, Inc. Learned data ontology using word embeddings from multiple datasets
US11625395B2 (en) * 2021-01-25 2023-04-11 Qliktech International Ab Methods and systems for undetermined query analytics
US11157458B1 (en) 2021-01-28 2021-10-26 Qumulo, Inc. Replicating files in distributed file systems using object-based data storage
US11461241B2 (en) 2021-03-03 2022-10-04 Qumulo, Inc. Storage tier management for file systems
US11132126B1 (en) 2021-03-16 2021-09-28 Qumulo, Inc. Backup services for distributed file systems in cloud computing environments
US11567660B2 (en) 2021-03-16 2023-01-31 Qumulo, Inc. Managing cloud storage for distributed file systems
US11669255B2 (en) 2021-06-30 2023-06-06 Qumulo, Inc. Distributed resource caching by reallocation of storage caching using tokens and agents with non-depleted cache allocations
US11294604B1 (en) 2021-10-22 2022-04-05 Qumulo, Inc. Serverless disk drives based on cloud storage
US11354273B1 (en) 2021-11-18 2022-06-07 Qumulo, Inc. Managing usable storage space in distributed file systems
US11599508B1 (en) 2022-01-31 2023-03-07 Qumulo, Inc. Integrating distributed file systems with object stores
US11722150B1 (en) 2022-09-28 2023-08-08 Qumulo, Inc. Error resistant write-ahead log
US11729269B1 (en) 2022-10-26 2023-08-15 Qumulo, Inc. Bandwidth management in distributed file systems
US11966592B1 (en) 2022-11-29 2024-04-23 Qumulo, Inc. In-place erasure code transcoding for distributed file systems
US11921677B1 (en) 2023-11-07 2024-03-05 Qumulo, Inc. Sharing namespaces across file system clusters
US11934660B1 (en) 2023-11-07 2024-03-19 Qumulo, Inc. Tiered data storage with ephemeral and persistent tiers

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5713020A (en) * 1993-09-02 1998-01-27 Microsoft Corporation Method and system for generating database queries containing multiple levels of aggregation
US5692107A (en) * 1994-03-15 1997-11-25 Lockheed Missiles & Space Company, Inc. Method for generating predictive models in a computer system
US5999192A (en) * 1996-04-30 1999-12-07 Lucent Technologies Inc. Interactive data exploration apparatus and methods
US5822751A (en) * 1996-12-16 1998-10-13 Microsoft Corporation Efficient multidimensional data aggregation operator implementation
US5940818A (en) * 1997-06-30 1999-08-17 International Business Machines Corporation Attribute-based access for multi-dimensional databases
US5978796A (en) * 1997-06-30 1999-11-02 International Business Machines Corporation Accessing multi-dimensional data by mapping dense data blocks to rows in a relational database
US6032146A (en) * 1997-10-21 2000-02-29 International Business Machines Corporation Dimension reduction for data mining application
US5918232A (en) * 1997-11-26 1999-06-29 Whitelight Systems, Inc. Multidimensional domain modeling method and system
US6009432A (en) * 1998-07-08 1999-12-28 Required Technologies, Inc. Value-instance-connectivity computer-implemented database

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100848264B1 (ko) * 2006-11-23 2008-07-25 연세대학교 산학협력단 강교량의 데이터베이스 구축방법

Also Published As

Publication number Publication date
CN1144145C (zh) 2004-03-31
EP1131744B1 (en) 2010-03-03
CA2337519A1 (en) 2000-11-30
ZA200100522B (en) 2002-05-20
IL140867A (en) 2005-11-20
ATE459926T1 (de) 2010-03-15
EP1131744A4 (en) 2003-09-10
BR0006145A (pt) 2001-04-03
AU780565B2 (en) 2005-04-07
CN1310824A (zh) 2001-08-29
JP2003500748A (ja) 2003-01-07
WO2000072201A1 (en) 2000-11-30
IL140867A0 (en) 2002-02-10
CA2337519C (en) 2005-01-25
DE60043925D1 (de) 2010-04-15
HK1042346A1 (zh) 2002-08-09
US6163774A (en) 2000-12-19
AU5154500A (en) 2000-12-12
EP1131744A1 (en) 2001-09-12

Similar Documents

Publication Publication Date Title
KR20010072019A (ko) 데이터 웨어하우스에 대한 애그리깃 레벨 및 크로스프로덕트 레벨을 선택하는 방법 및 장치
US20210209157A1 (en) System and method for non-programmers to dynamically manage multiple sets of xml document data
US10685312B2 (en) Techniques for semantic business policy composition
US5630127A (en) Program storage device and computer program product for managing an event driven management information system with rule-based application structure stored in a relational database
US6263341B1 (en) Information repository system and method including data objects and a relationship object
US7630956B2 (en) System and method for analyzing and reporting extensible data from multiple sources in multiple formats
US5455945A (en) System and method for dynamically displaying entering, and updating data from a database
US6772409B1 (en) Specification to ABAP code converter
US6339775B1 (en) Apparatus and method for performing data transformations in data warehousing
US6212524B1 (en) Method and apparatus for creating and populating a datamart
JP4465147B2 (ja) データベースシステムにおいてスプレッドシートの算出を行なう方法
US20100131565A1 (en) Method for creating a self-configuring database system using a reusable custom-defined nestable compound data type
US20060161589A1 (en) Simplifying Movement of Data to Different Desired Storage Portions Depending on the State of the Corresponding Transaction
Hars et al. Reference models for enterprise-wide data engineering
US7627553B1 (en) Custom queries for segmentation
Fernando et al. Database Programming
Davis The data dictionary
P Snehalatha Logical Modeling of ETL Processes Using XML
Panchenko et al. A relational framework and case shells of a new type
Hars et al. Reference models for enterprise-wide
Österle et al. Data Design
JPH0224745A (ja) ファイル処理装置

Legal Events

Date Code Title Description
A201 Request for examination
N231 Notification of change of applicant
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
NORF Unpaid initial registration fee