METHOD AND SYSTEMS FOR MAKING OLAP HIERARCHIES SUMMARISABLE

Abstract: A method, a computer system and a computer programme product for a computer system for transforming general On-line Analytical Processing (OLAP) hierarchies into summarisable hierarchies whereby pre-aggregation is disclosed, by which fast query response times for aggregation queries without excessive storage use is made possible even when the hierarchies originally are irregular. Pre-aggregation is essential for ensuring adequate response time during data analysis. Most OLAP systems adopt the <i>practical pre-aggregation</i> approach, as opposed to <i>full pre-aggregation</i>, of materialising only select combinations of aggregates and then re-use these for efficiently computing other aggregates. However, this re-use of aggregates is contingent on the dimension hierarchies and the relationships between facts and dimensions satisfying stringent constraints. The present invention significantly extends the scope of practical pre-aggregation by transforming irregulare dimension hierarchies and fact-dimension relationships into well-behaved structures that enable practical pre-aggregation.

Description: METHOD AND SYSTEMS FOR MAKING OLAP HIERARCHIES SUMMARISABLE Field of the Invention The present invention relates to a method, a computer system, and a computer programme product for a computer system for transforming general On-line Analytical Processing (OLAP) hierarchies into summarisable hierarchies whereby pre-aggregation is enabled. Thereby, fast query response times for aggregation queries without excessive storage use are made possible even when the hierarchies originally are irregular. Background of the invention On-line Analytical Processing (OLAP) systems, which aim to ease the process of extracting useful information from large amounts of detailed transactional data, have gained widespread acceptance in traditional business applications as well as in new applications such as health care. These systems generally offer a dimensional view of data, in which measured values, termed facts, are characterised by descriptive values, drawn from a number of dimensions; and the values of dimension are typically organised in a containment-type hierarchy. A prototypical query applies an aggregate function, such as average, to the facts characterised by specific values from the dimensions. Fast response times are required from these systems, even for queries that aggregate large amounts of data. The perhaps most central technique used for meeting this requirement is termed pre-aggregation, where the results of aggregate queries are pre- computed and stored, i.e., materialised, for later use during query processing. Pre- aggregation has attracted substantial attention in the research community, where it has been investigated how to optimally use pre-aggregated data for query optimisation [7,3] and how to maintain the pre-aggregated data when base data is updated [19,24]. Further, the latest versions of commercial RDBMS products offer query optimisation based on pre- computed aggregates and automatic maintenance of the stored aggregate when base data is updated [30]. The fastest response times may be achieved when materialising aggregate results corresponding to all combinations of dimension values across all dimensions, termed full (or eager) pre-aggregation. However, the required storage space grows rapidly, to quickly become prohibitive, as the complexity of the application increases. This phenomenon is called data explosion [4, 21 , 27] and occurs because the number of possible aggregation combinations grows rapidly when the number of dimensions increase, while the sparseness of the multidimensional space decreases in higher dimension levels, meaning that aggregates at higher levels take up nearly as much space as lower-level aggregates. In some commercial applications, full pre-aggregation takes up as much as 200 times the space of the raw data [21 ]. Another problem with full pre-aggregation is that it takes too long to update the materialised aggregates when base data changes. With the goal of avoiding data explosion, research has focused on how to select the best subset of aggregation levels given space constraints [1 , 9, 11 , 26, 28, 32] or maintenance time constraints [10], or the best combination of aggregate data and indices [8]. This approach is commonly referred to as practical (or partial or semi-eager [5, 11 , 29]) pre- aggregation. Commercial OLAP systems now also exist that employ practical pre- aggregation, e.g., Microsoft Decision Support Services (Plato) [18] and Informix MetaCube [13]. The premise underlying the applicability of practical pre-aggregation is that lower-level aggregates can be re-used to compute higher-level aggregates, known as summarisability [16]. Summarisability occurs when the mappings in the dimension hierarchies are onto (all paths in the hierarchy have equal lengths), covering (only immediate parent and child values can be related), and strict (each child in a hierarchy has only one parent); and when also the relationships between facts and dimensions are many-to-one and facts are always mapped to the lowest levels in the dimensions [16]. However, the data encountered in many real-world applications fail to comply with this rigid regime. This motivates the search for techniques that allow practical pre-aggregation to be used for a wider range of applications, the focus of the present invention. Description of the Invention Motivated by the increasing use of OLAP systems in many different applications, including in business and health care, the present invention provides transformation techniques for multidimensional databases that leverage the existing, performance-enhancing technique, known as practical, or partial or semi-eager, pre-aggregation, by making this technique relevant to a much wider range of real-world applications. Current pre-aggregation techniques assume that the dimensional structures are summarisable. Specifically, the mappings in dimension hierarchies must be onto, covering, and strict, the relationships between facts and dimensions must be many-to- one, and the facts must always be mapped to the lowest categories in dimensions. The present invention presents novel transformation techniques that render dimensions with hierarchies that are non-onto, non-covering, and non-strict summarisable. The transformations have practically low computational complexity, they may be implemented using standard relational database technology, and it is also disclosed how to integrate the transformed hierarchies in current OLAP systems, transparently to the user. The present description also disclose how to apply the transformations according to the invention to the cases of non-summahsable relationships between facts and dimensions, which also occur often in real-world applications. Finally, it is shown how to modify the algorithms to incrementally maintain the transformed hierarchies when the underlying data is modified. To our knowledge, this work is the first to present algorithms to automatically achieve summarisability for non-covering and non-onto hierarchies. The research reported here is also the first to demonstrate techniques and algorithms for achieving summarisability in non-strict hierarchies. The integration of the techniques into current systems, transparently to the user, we believe is a novel feature. The multidimensional databases or objects are, as the term indicates, comprised of a plurality of dimensions each being a hierarchy and the basic of the invention is to transform dimensions being irregular, that is being non-covering and/or non-onto and/or non-strict, into dimensions that are at least partly aggregation normalised, for most practical cases preferably fully aggregation normalised, to enable practical pre- aggregation of the dimensions. Thus, the present invention relates to a method for by means of a computer to at least partly aggregation normalise a dimension having dimension values organised into categories of dimension values based on a partial ordering, the dimension comprising mappings of links between dimension values, the method comprising the steps of retrieve the mapping from data storage means associated with the computer, analysing the mapping to determine irregularities of the dimension by means of analysing means executed by the computer, creating new dimension values of the dimension and modifying the mapping between dimensional values of the dimension according to the analysis, whereby the dimension is at least partly aggregation normalised, and saving the new dimension values and the modified mappings in data storage means of the computer. Most important for a preferred embodiment of the present invention is to transform the dimension to a aggregation strict dimension, thus the step of creating new dimensional values and modifying the mapping preferably comprises the step of executing a make-strict procedure for making the dimension aggregation strict, thereby making the non-strict dimension aggregation normalised, the make-strict procedure being executed on the condition that the dimension is covering as well as onto prior to the execution. The step of creating new dimensional values and modifying the mapping may further comprise the step of executing a make-onto procedure for making the dimension onto, thereby at least partly making an into dimension aggregation normalised, the make-onto procedure being executed on the condition that the dimension is covering prior to the execution. This step is included and executed if the method should be able to handle dimensions being non- onto. Additionally or alternatively, the step of creating new dimensional values and modifying the mapping may comprise the step of executing a make-covering procedure for making the dimension covering, thereby at least partly making a non-covering dimension aggregation normalised. This step is included and executed if the method should be able to handle dimensions being non- covering. The make-strict procedure comprises in a preferred embodiment of the invention the steps of, starting from the bottom category and successively proceeding towards the top category, identifying combinations of dimensional values of the same category for each of which combination at least one dimension value of a category below said category is linked to each of the dimension values of the combination, creating one or more new dimensional values each representing one of the identified combinations of dimensional values and creating links from the new dimensional values to dimensional values of above categories in accordance with existing links from each of the dimensional values represented by the new dimensional value, and identifying dimension values being linked to identified combinations of dimensional values of the same category and replacing the links with links to new dimensional values representing said combinations of dimensional values. According to an even more preferred embodiment, the make-strict procedure comprises the successive steps of (i) setting the bottom category of the dimension as the child category, (ii) for each category being a direct predecessor of the child category of which category at least one dimension value of the child category is linked to a dimension value of, setting said category as the parent category and performing the steps of: (iia) ending the make-strict procedure for the parent category in case the parent category is the top category of the dimension, (iib) ending the make-strict procedure for the parent category in case no dimension value of the parent category is linked to a dimension value of a higher category, (iic) creating a new fused category in the dimension immediately below the parent category in case at least one of the dimension values of the child category is linked to more than one dimension value of the parent category, (iid) for each dimensional value of the child category, performing the steps of: creating a new dimension value of the new fused category representing the one or more values of the parent category to which the dimensional value of the child category is linked and creating links from said new dimension value to said values in the parent category, the creation of the new dimension value being conditioned that no dimension value of the new fused category already exists having exactly such link(s), and for each category being a direct predecessor of the parent category of which category at least one dimension value of the parent category is linked to a dimension value of, setting said category as a grandparent category and creating links from the new dimension value to the one or more dimension values of the grandparent category to which said one or more dimensional values of the parent category are linked, (iie) removing the links from the parent category to the one or more grandparent categories, whereby the grandparent categories no longer are direct predecessors of the parent category, (iif) creating links from each dimensional value of the child category to the dimension value of the new fused category having the same links to the dimension values of the parent category whereby the new fused category becomes a direct predecessor of the child category, and removing the links from the dimension values of the child category to the parent category, whereby the parent category no longer is a direct predecessor of the child category, and (iig) setting the new fused category as the child category and returning to step (ii). This procedure is described as a recursive process but it is within the scope of the present invention to include a similar iterative procedure which would be obvious to the person skilled in the art. The make-onto procedure comprises according to a preferred embodiment of the invention the steps of, starting from the to category and successively proceeding towards the bottom category, creating, for each dimension value of each category above the bottom category not being linked to any dimensional value of the category immediately below, a new dimension value in the category immediately below and creating a link between said new dimension value and said dimension value of the category in question. According to an even more preferred embodiment, the make-onto procedure comprises the successive steps of (i) setting the top category of the dimension as the parent category, (ii) for each category immediately below the parent category and having dimension values being linked to dimension values of the parent category, setting said category as the child category and perform the steps of (iia) creating, for each dimension value of the parent category not being linked to any dimensional value of the child category, a new dimension value in the child category and creating a link between said new dimension value and said dimension value of the parent category, (iib) setting the child category as parent category, (iic) ending the make-onto procedure in case the parent category is the bottom category of the dimension, else returning to step (ii) of the make-onto procedure. As for the make-strict procedure, this procedure is described as a recursive process but it is within the scope of the present invention to include a similar iterative procedure which would be obvious to the person skilled in the art. The make-covering procedure comprises according to a preferred embodiment of the present invention the successive steps of identifying links between dimension values of two categories having at least one intermediate category there between, creating a new dimension value in each of said intermediate categories for each of those links for which no paths of links exists going only through immediate child-parent links from lower to higher categories and including a link to a dimension value of the intermediate category, and replacing those links with links between the dimension values of those links and the new dimension values. According to an even more preferred embodiment, the make-covering procedure comprises the successive steps of (i) setting the bottom category of the dimension as the child category, (ii) for each category immediately above the child category for which at least one link between a dimension value of said category and a dimension value of the child category exists, setting the category as the parent category and perform the steps of: (iia) ending the make-covering procedure for the parent category in case the parent category is the top category of the dimension:, (iib) for each higher category being a direct predecessor category of the child category and being higher in the hierarchy than the parent category, performing the steps of (iiba) identifying sets of dimension values of the higher category and dimension values of the child category for which sets a link exists, and no paths of links going only from lower to higher categories and including a link to a dimension value of the parent category exists, and (iibb) creating for each identified set of dimension values a new dimension value in the parent category, creating links between each of the dimension values of the set and the new dimension value, and removing the link between the two dimension values of the identified set, whereby the higher category no longer is a predecessor of the child category, (iic) setting the parent category as the child category and returning to step (ii). As with the above described procedures, this procedure is also described as a recursive process but it is within the scope of the present invention to include a similar iterative procedure which would be obvious to the person skilled in the art. The present invention further relates to a method for by means of a computer to at least partly aggregation normalise a multidimensional object including a set of facts comprising a plurality of facts mapped on a plurality of dimensions having dimension values organised into categories of dimension values based on a partial ordering, the multidimensional object comprising mappings of links between dimension values within each dimension, by means of applying the method according to previous description including the variations thereof to at least one of the dimensions of the multidimensional object. In order to handle multidimensional object comprising a plurality of facts and in which the mapping comprises links from each of the facts to at least one dimension value in each of the plurality of dimensions, the facts may be organised in the hierarchies of the dimensions so that they constitute the bottom layer of each of the dimensions of the multidimensional object where after the method is applied to the object. According to a variation of the present invention which for may practical situations of pre- aggregation is preferred, one or more of the dimensions of the multidimensional object is only partly aggregation normalised, the performance of the partly aggregation normalisation being based on a selection of a subset of categories of the one or more dimension to be aggregation normalised. In particular, one or more of the dimensions of the multidimensional object may be only partly aggregation normalised in that the normalisation steps to be performed are selected by means of the computer based on a selection of specific aggregation functions to be performed on the multidimensional object. The present invention relates in a yet further aspect and as an alternative to the above disclosed method of including the facts into the multidimensional object and perform the aggregation normalisation on the whole object, to a method for by means of a computer to at least partly aggregation normalise a multidimensional object including a set of facts comprising a plurality of facts mapped on an aggregation normalised plurality of dimensions having dimension values being organised into categories of dimension values based on a partial ordering, the multidimensional object comprising mappings of links between dimension values within each dimension, the method comprising the steps of retrieve the mapping from data storage means associated with the computer, including the mapping of the plurality of facts on the multidimensional object into the mapping of the multidimensional object so that the mapping comprises links from each of the facts to at least one dimension value in each of the plurality of dimensions, and the facts constitutes the bottom layer of each of the dimensions of the multidimensional object, analysing the mapping of the multidimensional object to determine irregularities of the dimensions by means of analysing means executed by the computer, creating new dimension values of the multidimensional object and modifying the mapping between dimensional values of the multidimensional object according to the analysis, whereby the multidimensional object is at least partly aggregation normalised, and saving the new dimensions and the modified mapping in data storage means of the computer. In a preferred embodiment of the yet further aspect of the present invention, the step of creating new dimensional values and modifying the mapping comprises the step of executing a make-strict procedure for making the multidimensional object aggregation strict, thereby making the non-strict multidimensional object aggregation normalised, the make-strict procedure being executed on the condition that the multidimensional object is covering prior to the execution. Additionally or alternatively, the step of creating new dimensional values and modifying the mapping comprises the step of executing a make-covering procedure for making the multidimensional object covering, thereby at least partly making the non-covering multidimensional object aggregation normalised. The make-strict and make-covering procedures may within the scope of the present invention be constructed similarly to the above-described procedures with the necessary modifications which for the skilled person would be straight forward. The method according to the yet further aspect may further comprise the initial step of making each of the plurality of dimensions aggregation normalised by means of the method described previously. The created new dimensional values may be marked as such, e.g. be stored in a parallel new dimension or in another manner be recognisable by the computer as being new values, likewise may the changed mapping be made recognisable, where after a pre- aggregation is performed on a multidimensional object being normalised by means of the computer according to the method and the method may further comprise the step of producing a reply to a query made to the system and concerning the multidimensional object, aggregate queries as well as navigation queries, in which reply the existence of the created new dimensional values is transparent. Thereby, the method of the present invention may be added to existing methods of replying to queries to multidimensional objects thus making the existing methods capable of handling irregular multidimensional objects without changing the users access to make queries or the replies to the queries. Thus, it is hidden or transparent to the user or the computer programme making the queries that the original multidimensional object is irregular and not aggregation normal. Multidimensional objects are often in practical use updated with new facts and it is preferred that the method is able to handle such updates, which may be very frequent, without the need to perform the above method on the entire original multidimensional object, which may be a very timely procedure. Thus, the method may further comprise the steps of implementing, into the aggregation normalised multidimensional object, of new facts including mapping of the facts onto the dimension, of new dimension values of the dimensions, or of new mapping between some of the dimension values, by which implementation irregularities of the multidimensional object is introduced, analysing the introduced irregularities of the dimensions of the multidimensional object, creating new dimensional values of the multidimensional object and modifying the mapping between dimensional values of the multidimensional object according to the analysis, whereby the multidimensional object is aggregation normalised, and saving the new dimensions and the modified mapping in data storage means of the computer. The present invention relates further to a computer system comprising at least one general purpose computer having data storage means associated therewith on which data storage means is stored a computer programme product suitable for adapting the computer to perform an at least partly aggregation normalisation of a multidimensional object according to the above-described method(s), the computer system comprising means for retrieving the computer programme product and perform accordingly. The present invention relates yet further to a computer programme product suitable for adapting a general purpose computer to perform an at least partly aggregation normalisation of a multidimensional object according to the above-described method(s). A still further aspect of the present invention relates to a computer system having data storage means associated therewith on which a multidimensional object is stored, the multidimensional object including a set of facts comprising a plurality of facts, a first plurality of dimensions having dimension values being organised into categories of dimension values based on a partial ordering and comprising a first mapping of links between dimension values within each dimension of the first plurality of dimensions as well as links between the facts and the dimensions of the first plurality of dimensions, at least one of the dimensions of the first plurality of dimensions being irregular, and a second plurality of dimensions having dimension values being organised into categories of dimension values based on a partial ordering and comprising a second mapping of links between dimension values within each dimension of the second plurality of dimensions as well as links between the facts and the dimensions of the second plurality of dimensions, each of the second plurality of dimensions being aggregation normalised, the computer system comprising a query handler component being adapted for producing replies to queries made to the computer system and concerning the multidimensional object, the replies to navigation queries being based on the first set of dimensions and the replies to aggregate queries being based on the second set of dimensions. Thereby, the transparency to the user and the integratibility with known systems is in general achieved. Furthermore, a set of pre-aggregation data relating to the second plurality of dimensions may be stored within the data storage means and the replies to aggregate queries furthermore are based on the set of pre-aggregation data. The query handler component may according to the computer system of the still further aspect be adapted for producing replies to aggregate queries in which replies the existence of the second plurality of dimensions is transparent. The query handler component may furthermore be adapted for transforming aggregate queries made to the first plurality of dimensions into queries for the second set of dimensions and transforming replies based on the second set of dimensions into replies as based on the first set of dimensions, thus making the existence of the second plurality of dimensions transparent in the produced reply. Additionally, the multidimensional object may be stored within the data storage means of the computer system in tables organised as a combination of star schemes for the part of the multidimensional object containing only strict mappings, and additional tables containing the non-strict part of the mappings, the query handler component makes use of said tables in transforming queries and replies. The computer system according to the still further aspect of the present invention may suitably be combined with the above-described method(s) and comprise means adapted for performing an at least partly aggregation normalisation of a multidimensional object according to the method(s). Description of the Preferred Embodiment The invention will be described primarily as a method for making non-summarisable hierarchies in multi-dimensional databases summarisable. However, a person skilled in the art will recognise that an apparatus, such as a data processing system, including a CPU, memory, I/O, program storage, a connecting bus, and other appropriate components, could be programmed or otherwise designed to facilitate the practice of the method of the invention. Such a system would include appropriate program means for executing the method of the invention. Also, an article of manufacture, such as a pre-recorded disk or other similar computer program products, for use with a data processing system, could include a storage medium and program means recorded thereon for directing the data processing system to facilitate the practice of the method of the invention. Such apparatus and articles of manufacture also fall within the spirit of the invention. Detailed description of the Invention We now proceed to describe the invention in detail. The next section presents a real-world clinical case study that exemplifies the non-summarisable properties of real-world applications. The following section proceeds to define the aspects of a multidimensional data model necessary for describing the new techniques, and defines also important properties related to summarisability. Algorithms are presented for transforming dimension hierarchies to achieve summarisability, then apply the algorithms to fix non- summarisable relationships between facts and dimensions. It is also demonstrated how the techniques may be integrated into current systems, transparently to the user and how to modify the algorithms to accommodate incremental computation. Motivation— A Case Study This section presents a case study that illustrates the properties of real-world dimension hierarchies. The case study concerns patients in a hospital, their associated diagnoses, and their places of residence. The data analysis goal is to investigate whether some diagnoses occur more often in some areas than in others, in which case environmental or lifestyle factors might be contributing to the disease pattern. An ER diagram illustrating the underlying data is seen in Figure 1. The most important entities are the patients, for which we record the name. We always want to count the number of patients, grouped by some properties of the patients. Thus, in multidimensional terms, the patients are the facts, and the other, describing, entities constitute the dimensions. Each patient has a number of diagnoses, leading to a many-to-many relationship between facts and the diagnosis dimension. When registering diagnoses of patients, physicians use different levels of granularity, ranging from very precise diagnoses, e.g., "Insulin dependent diabetes during pregnancy," to more imprecise diagnoses, e.g. , "Diabetes," which cover wider ranges of patient conditions. To model this, the relationship from patient to diagnoses is to the supertype "Diagnosis," which then has three subtypes, corresponding to different levels of granularity, the low-level diagnosis, the diagnosis family, and the diagnosis group. Examples of these are "Insulin dependent diabetes during pregnancy," "Insulin dependent diabetes," and "Diabetes," respectively. The higher-level diagnoses are both (imprecise) diagnoses in their own right, but also serve as groups of lower-level diagnoses. Each diagnosis has an alphanumeric code and a descriptive text, which are specified by some standard, here the World Health Organisation's International Classification of Diseases (ICD-10) [31], or by the physicians themselves. Indeed, two hierarchies are captured: the standard hierarchy specified by the WHO, and the user-defined hierarchy, which is used for grouping diagnoses on an ad-hoc basis in other ways than given by the standard. The Type attribute on the relationships determines whether the relation between two entities is part of the standard or the user-defined hierarchy. The hierarchy groups low-level diagnoses into diagnosis families, each of which consists of 2-20 related diagnoses. For example, the diagnosis "Insulin dependent diabetes during pregnancy" (the reason for having a separate pregnancy related diagnosis is that diabetes must be monitored and controlled particularly intensely during a pregnancy to assure good health of both mother and child) is part of the family "Diabetes during pregnancy." In the WHO hierarchy, a low-level diagnosis belongs to exactly one diagnosis family, whereas the user- defined hierarchy does not have this restriction. Thus, a low-level diagnosis can belong to several diagnosis families, e.g., the "Insulin dependent diabetes during pregnancy" diagnosis belongs to both the "Diabetes during pregnancy" and the "Insulin dependent diabetes" family. Next, diagnosis families are grouped into diagnosis groups, consisting of 2-10 families, and one family may be part of several groups. For example, the family "Diabetes during pregnancy" may the part of the "Diabetes" and "Other pregnancy related diseases" groups. In the WHO hierarchy, a family belongs to exactly one group. In the WHO hierarchy, a lower-level value belongs to exactly one higher-level value, making it strict and covering. In the user-defined hierarchy, a lower-level value may belong to zero or more higher-level values, making it non-strict and non-covering. Properties of the hierarchies will be discussed in more detail in the section "Hierarchy Properties." We also record the addresses of the patients. If the address is located in a city, we record the city; otherwise, if the address is in a rural area, we record the county in which the address is located. A city is located in exactly one county. As not all addresses are in cities, we cannot find all addresses in a county by going through the "City located in" relationship. Thus, the mapping from addresses to cities is non-covering w.r.t. addresses. For cities and counties, we just record the name. Not all counties have cities in them, so the mapping from cities to counties is into rather than onto. In order to exemplify the data, we assume a standard mapping of the ER diagram to relational tables, i.e., one table per entity and relationship type. We also assume the use of surrogate keys, named ID, with globally unique values. The three subtypes of the Diagnosis type are mapped to a common Diagnosis table, and because of this, the "belongs to" and "grouping" relationships are mapped to a common "Grouping" table. The resulting tables with sample data are shown in Table 1 and will be used in examples throughout the paper. If we apply pre-aggregation to the data from the case study, several problems occur. For example, if the counts of patients by City are pre-computed and we use these for computing the numbers of patients by county, an incorrect result will occur. In the data, the addresses "123 Rural Road" and "1 Sandy Dunes" (one of them is the address of a patient) are not in any city, making the mapping from City to County not covering w.r.t. addresses. Next, if the counts of patients by Low-Level Diagnosis are pre-computed and we use these for computing the total count of patients, an incorrect result again ensues. First, patients only with lung cancer are not counted, as lung cancer is not present at the level of Low-Level Diagnosis; the mapping from Low-Level Diagnosis to Diagnosis Family is into. Second, patients such as "Jim Doe" only have higher-level diagnoses and will no be counted; the fact-to- dimension mapping has varying granularity. Third, patients such as "Jane Doe" have several diagnoses and will be counted several times; the relationship between facts and dimensions City Patient LivesAt Address Has Diagnosis LocatedlnCity Located I n Ru ralArea CityLocatedln County Table 1 : Tables for the Case Study is many-to-many. Fourth, Low-Level diagnoses such as "Insulin dependent diabetes during pregnancy" are part of several diagnosis families, which may also lead to "double" counting when computing higher-level counts; the dimension hierarchy is non-strict. These problems yield "non-summarisable" dimension hierarchies that severely limit the applicability of practical pre-aggregation, leaving only full pre-aggregation, requirering huge amounts of storage, or no pre-aggregation, resulting in long response time for queries. The properties described above are found in many other real-world applications. Many- to-many relationships between facts and dimensions occur between bank customers and ac- counts, between companies and Standard Industry Classifications (SICs), and between students and departments [15, 16]. Non-strict dimension hierarchies occur from cities to states in a Geography dimension [25] and from weeks to months in a Time dimension. In addition, hierarchies where the change over time is captured are generally non-strict. The mapping from holidays to weeks as well as organisation hierarchies of varying depth [12] offer ex- amples of "into" mappings. Non-covering relationships exist for days-holidays-weeks and for counties-cities-states, as well as in organisation hierarchies [12]. Even though many real-world cases possess the properties described above, current techniques for practical pre-aggregation require that facts are in a many-to-one relationships to dimensions and that all hierarchies are strict, onto, and covering. Thus, current techniques cannot be applied when the hierarchies has these properties. Method Context This section defines the aspects of a multidimensional data model that are necessary to define the techniques that enable practical pre-aggregation in applications as the one just described. The full model is described elsewhere [22]. Next, the data model context is exploited for defining properties of hierarchies relevant to the techniques. The particular data model has been chosen over other multidimensional data models because it quite naturally captures the data described in the case study and because it includes explicit concepts of dimensions and dimension hierarchies, which is very important for clearly presenting the techniques. However, the techniques are also applicable to other multidimensional or statistical data models, as will be discussed in the section "Architectural Conext." A Concrete Data Model Context For each part of the model, we define the intension and the extension, and we give an illus- trating example. An n-dimensional fact schema is a two-tuple <S = (J-,!?), where T is a fact type and V = {Ti,i = 1, ..,n} is its corresponding dimension types. Example 1 In the case study, Patient is the fact type, and Diagnosis, Residence, and Name are the dimension types. The intuition is that everything that characterises the fact type is considered to be dimensional. A dimension type T is a four-tuple (C, <τ, τ τ , ± τ ), where C = {C j ,j = l, .., fc} are the category types of T, <τ is a partial order on the cys, with T r e C and ± T e C being the top and bottom element of the ordering, respectively. Thus, the category types form a lattice. The intuition is that one category type is "greater than" another category type if members of the former's extension logically contain members of the latter's extension, i.e., they have a larger value size. The top element of the ordering corresponds to the largest possible value size, that is, there is only one value in it's extension, logically containing all other values. We say that C j is a category type of T, written C j e T, if C j e C. Example 2 Low-level diagnoses are contained in diagnosis families, which are contained in diagnosis groups. Thus, the Diagnosis dimension type has the following order on its category types: -L D i agnos i s = Low-level Diagnosis < Diagnosis Family < Diagnosis Group < T Diαgnosis . Other examples of category types are Address, City, and County. Figure 2, to be discussed in detail later, illustrates the dimension types of the case study. A category C j of type C j is a set of dimension values e. A dimension D of type T = ({C j }, <τ . Tr, J-r) is a two-tuple D = (C, <), where C = {Cj} is a set of categories Cj such that Type(C j ) = C j and < is a partial order on U j C j , the union of all dimension values in the individual categories. We assume a function Pred ■ . C - 2 C that gives the set of direct predecessors of a category Cj. Similarly, we a assume a function Desc : C - 2 C that gives the set of direct descendants of a category C j . For both Pred and Desc, we "count" from the category T r (of type T τ ), so that category T r has no predecessors and category _ r (of type J_r) has no descendants. Similarly, we assume a function ImmPred : C ι→ 2 c that gives only the set of immediate predecessors of a category C j . Immediate predecessors are immediately above in the hierarchy, i.e., City is an immediate predecessor of Address, but County is not. Similarly, we a assume a function ImmDesc : C ι→ 2 σ that gives the set of immediate descendants of a category C j . The definition of the partial order is: given two values e 1 ; e 2 then e < e 2 if e \ is logically contained in e 2 . We say that Cj is a category of D, written C j e D, if C j e C. For a dimension value e, we say that e is a dimensional value of D, written e € D, if e € U j C j . The category of type r m dimension of type T contains the values with the smallest value size. The category with the largest value size, with type T r , contains exactly one value, denoted T. For all values e of the dimension D, e < T. Value T is similar to the ALL construct of Gray et al. [6]. When the context is clear, we refer to a category of type T r as a T category, not to be confused with the T dimension value. Example 3 In our Diagnosis dimension we have the following categories, named by their type. The numbers in parentheses are the ID values from the Diagnosis table in Table 1. Low-level Diagnosis = {"Insulin dependent diabetes during pregnancy" (5), "Non insulin dependent diabetes during pregnancy" (6)}, Diagnosis Family = {"Diabetes during pregnancy" (4), "Insulin dependent diabetes" (9), "Non insulin dependent diabetes" (10), "Lung cancer" (14)}, Diagnosis Group = {"Diabetes" (11), "Other pregnancy related diseases" (12), "Cancer" (13)}, and T D i agnosis = {T}. We have that Pred(Low-level Diagnosis) = {Diagnosis Family}. The partial order < is obtained by combining WHO and user-defined hierarchies, as given by the Grouping table in Table 1. Additionally, the top value T is greater than, i.e., logically contains, all the other diagnosis values. Let F be a set of facts, and D = (C = {C j }, <) a dimension. A fact-dimension relation between F and D is a set R — {(/, e)}, where / € F and e € UjCj. Thus R links facts to dimension values. We say that fact / is characterised by dimension value e, written / ~» e, if 3eι e D ((/, eι) R A ei ≤ e). We require that V/ € F (3e e UjCj ((/, e) € R)) thus, all fact maps to at least one dimension value in every dimension. The T value is used to represent an unknown or missing value, as T logically contains all dimension values, and so a fact / is mapped to T if it cannot be characterised within the particular dimension. Example 4 The fact-dimension relation R links patient facts to diagnosis dimension values as given by the Has table from the case study, so that R = {("John Doe" (1), "Insulin dependent diabetes" (9)), ("Jane Doe" (2), "Insulin dependent diabetes during pregnancy" (5)), ("Jane Doe" (2), "Insulin dependent diabetes" (9)), ("Jim Doe" (3), "Diabetes" (11))}. Note that facts may be related to values in higher-level categories. We do not require that e belongs to ■^- D i gnos i - For example, the fact "John Doe" (1) is related to the diagnosis "Insulin dependent diabetes" (5), which belongs to the Diagnosis Family category. This feature will be used later to explicitly capture the different granularities in the data. If no diagnosis was known for patient "John Doe" (1 ), we would have added the pair ("John Doe" (1 ),T) to R. A multidimensional object (MO) is a four-tuple M = (S, F, D, R), where S = (T, T> = { }) is the fact schema, F = {/} is a set of facts f where Type(f) = T, D = {£>,, i = l, .., n} is a set of dimensions where Type(D ) = , and ii = {i^,? = 1, ..,n} is a set of fact-dimension relations, such that Vt((/, e) <≡ Rι = / € F Λ 3C, € (e € G,-)). Example 5 For the case study, we get a three-dimensional MO M = (S,F,D,R), where S = (Patient, {Diagnosis, Name, Residence}) and F = {"John Doe" (1), "Jane Doe" (2), "Jim Doe" (3)}. The definition of the diagnosis dimension and its corresponding fact-dimension relation was given in the previous examples. The Residence dimension has the categories Address (= ±_ Res , dence ), City, County, and T Residence . The values of the categories are given by the corresponding tables in Table 1. The partial order is given by the relationship tables. Additionally, the only value in the T Reside nc e category is T, which logically contains all the other values in the Residence dimension. The Name dimension is simple, i.e., it just has a Name category (= l Λmc ) and a T category. We will refer to this MO as the "Patient" MO. A graphical illustration of the schema of the "Patient" MO is seen in Figure 2. Because some addresses map directly to counties, County is an immediate predecessor of Address. The facts in an MO are objects with value-independent identity. We can test facts for equality, but do not assume an ordering on the facts. The combination of dimensions values that characterise the facts of a fact set is not a "key" for the fact set. Thus, several facts may be characterised by the same combination of dimension values. But, the facts of an MO is a set, so an MO does not have duplicate facts. The model formally defines quite general concepts of dimensions and dimension hierarchies, which is ideal for the presentation of our techniques. The presented techniques are not limited by the choice of data model. Hierarchy Properties In this section important properties of MOs that relate to the use of pre-computed aggregates are defined. The properties will be used in the following sections to state exactly what problems the proposed algorithms solve. The first important concept is summarisability, which intuitively means that higher-level aggregates may be obtained directly from lower-level ag- gregates. Definition 1 Given a type T, a set S - {S j ,j = 1, .., &}, where S j € 2 T , and a function g : 2 T π→. T, we say that g is summarisable for S if g({{g(Sι), ..,g(S k )}}) = g(Sι u .. u S k ). The argument on the left-hand side of the equation is a multiset, i.e., the same value may occur multiple times. Summarisability is important as it is a condition for the flexible use of pre-computed aggre- gates. Without summarisability, lower-level results generally cannot be directly combined into higher-level results. This means that we cannot choose to pre-compute only a relevant selection of the possible aggregates and then use these to (efficiently) compute higher-level aggregates on-the-fly. Instead, we have to pre-compute the all the aggregate results of queries that we need fast answers to, while other aggregates must be computed from the base data. Space and time constraints can be prohibitive for pre-computing all results, while computing aggregates from base data is often inefficient. It has been shown that summarisability is equivalent to the aggregate function (g) being distributive, all paths being strict, and the mappings between dimension values in the hierarchies being covering and onto [16]. These concepts are formally defined below. The definitions assume a dimension D = (C, <) and an MO M = (S, F, D, R). Definition 2 Given two categories, Cι, C 2 such that C 2 € Pred(C ), we say that the mapping from d to C 2 is onto iff Ve 2 € C 2 (3eι € C x (e x < e 2 )). Otherwise, it is into. If all mappings in a dimension are onto, we say that the dimension hierarchy is onto. Given an MO M, if all dimension hierarchies in M are onto, we say that M is onto. Mappings that are into typically occur when the dimension hierarchy has varying height. In the case study, there is no low-level cancer diagnosis, meaning that some parts of the hierarchy have height 2, while most have height 3. It is thus not possible to use aggregates at the Low-level Diagnosis level for computing aggregates at the two higher levels. Mappings that are into also occur often in organisation hierarchies. Definition 3 Given three categories, C , C 2 , and C 3 such that Type(C x ) < Type(C 2 ) < Type(C 3 ), we say that the mapping from C 2 to C 3 is covering with respect to C x iff Vei € Cι (Ve 3 € C 3 (ei < e 3 = 3e 2 e C 2 (ei < e Λ e 2 < e 3 ))). Otherwise, it is non-covering with respect to C \ . If all mappings in a dimension are covering w.r.t. any category, we say that the dimension hierarchy is covering. If all dimension hierarchies in the dimensions of M are covering and all mappings between categories in the dimensions of M are covering w.r.t. F, we say that M is covering. Non-covering mappings occur when some of the links between dimension values skip one or more levels and map directly to a value located higher up in the hierarchy. In the case study, this happens for the "1 Sandy Dunes" address, which maps directly to "Outback County" (there are no cities in Outback County). Thus, we cannot use aggregates at the City level for computing aggregates at the County level. Definition 4 Given an MO M = (S,F,D, R), and two categories C x and C 2 that belong to the same dimension e D such that Type(C x ) < Type(C 2 ), we say that the mapping from C \ to C 2 is covering with respect to F, the set of facts, iff V/ € F (Ve 2 e C 2 (/ -~>i e => 3ei € Cι (f ^ i e l /\ eι < i e 2 ))). This case is similar to the one above, but now it is the mappings between facts and dimension values that may skip one or more levels and map facts directly to dimension values in categories above the bottom level. In the case study, the patients can map to diagnoses anywhere in the Diagnosis dimension, not just to Low-level Diagnoses. This means that we cannot use aggregates at the Low-level Diagnosis Level for computing aggregates higher up in the hierarchy. Definition 5 Given two categories, Cγ and C 2 such that C 2 e Pred(Cι), we say that the mapping from Cι to C 2 is Strict iff Ve x e e 2 = e 3 )). Otherwise, it is non-strict. The hierarchy in dimension D is strict if all mappings in it are strict; otherwise, it is non-strict. Given an MO M = (S, F, D, R) and a category C j in some dimension Di € D, we say that there is a strict path from the set of facts F to C j iff V e F(f ~» ei Λ / ~» e 2 Λ eι € Cj Λ e 2 € Cj = e x - e 2 ). (Note that the paths to the T r categories are always strict.) The hierarchy in dimension D is said to be aggregation strict if the following hold: if a mapping from a category C to a category P, both in D, is non-strict, then Pred(P) = 0, i.e., P has no parents in the hierarchy. Non-strict hierarchies occur when a dimension value has multiple parents. This occurs in the Diagnosis dimension in the case study where the "Insulin dependent diabetes during pregnancy" low-level diagnosis is part of both the "Insulin Dependent Diabetes" and the "Diabetes during pregnancy" diagnosis families, which in turn both are part of the "Diabetes" diagnosis group. This means that we cannot use aggregates at the Diagnosis Family level to compute aggregates at the Diagnosis Group level, since data for "Insulin dependent diabetes during pregnancy" would then be counted twice. Hierarchies that are aggregation strict allow practical pre-aggregation to be applied because the values in the parent category has no par- ents themselves. This means that double-counting of data will not occur, since the values in the parent categories containing possibly overlapping data will not be added together. Definition 6 If the dimension hierarchy for a dimension D is onto, covering, and strict, we say that D is normalised. Otherwise, it is un-normalised. For an MO M = (S,D, F,R), if all dimensions € D are normalised and V-R* e R ((f, e) e Ri =>• e e ± D ) (i.e., all facts map to dimension values in the bottom category), we say that M is normalised. Otherwise, it is un-normalised. If the hierarchy in a dimension D is covering, onto, and aggregation strict, we say that D is aggregation normalised. If all dimensions in an MO M are aggregation normalised and the relationships from facts to dimensions are many-to-one and only to the bottom category, we say that M is aggregation normalised. For normalised hierarchies and MOs, all mappings are summarisable, meaning that we can pre-aggregate values at any combination of dimension levels and safely re-use the pre- aggregated values to compute higher-level aggregate results. Thus, we want to normalise the dimension hierarchies and MOs for which we want to apply practical pre-aggregation. We proceed to describe how the normalisation of the dimension hierarchies and MOs used for aggregation is achieved. We first show how to perform transformations on dimension hierarchies, then later describe how the same techniques may be applied to eliminate the non-summarisable properties of fact-dimension relations. Dimension Transformation Techniques This section describes how dimensions can be transformed to achieve summarisability. Transforming dimensions on their own, separately from the facts, results in well-behaved dimensions that can be applied in a number of different systems or sold to third-party users. The transformation of the dimension hierarchies is a three-step operation. First, all mappings are transformed to be covering, by introducing extra "intermediate" values. Second, all mappings are transformed to be onto, by introducing "placeholder" values at lower levels for values without any children. Third, mappings are made strict, by "fusing" values together. The three steps are treated in separate sections. None of the algorithms introduce any non-summarisable properties, so applying each once is sufficient. In general, the algorithms take as input a set of tables Rc c 2 that specifies the mapping from dimension values in category C\ to values in category C 2 . The input needs not contain all pairs of ancestors and descendants — only direct parent-child relationships are required. If there are non-covering mappings in the hierarchy, we have categories C,P,H such that {P,H} c Pred(C) and Type(P) < Type(H). In this case, the input must also contain R PjH tables that map P values to H values. The algorithms are expressed using recursion. They could also easily be expressed using iteration instead. Non-Covering Hierarchies The first algorithm renders all mappings in a dimension hierarchy covering w.r.t. any category. When a dimension value is mapped directly to another value in a category higher than the one immediately above it in the hierarchy, a new intermediate value is inserted into the category immediately above, and the two original dimension values are linked to this new value, rather than to each other. Example 6 In the hierarchy for the Residence dimension, two links go from Address directly to County. The address "123 Rural Road" (52) is in "Melbourne County" (31), but not in a city, and the address "1 Sandy Dunes" (53) is in "Outback County" (32), which does not have any cities at all. The algorithm inserts two new dimension values in the City category, C31 and C32, which represent Melbourne and Outback county, respectively, and links them to their respective counties. The addresses "123 Rural Road" and "1 Sandy Dunes" are then linked to C31 and C32, respectively. This occurs in the first call of procedure MakeCovering (on the Address category; the procedure is given below). When MakeCovering is called recursively on the City, County, and T categories, nothing happens, as all mappings are already covering. The transformation is illustrated graphically in Figure 3. The dotted lines show the "problematic" links, and the bold-face values and thick lines show the new dimension values and links. In the algorithm, C is a child category, P is an immediate parent category, H is a "higher category, L are the non-covering links from C to H, and N are the "higher" dimension values in L. The x operator denotes natural join. The algorithm works as follows. Given the argument category C (initially the bottom category) in line (1 ), the algorithms goes through all C's immediate parent categories P (2). For each immediate parent category P, it looks for predecessor categories H oiC that are "higher" in the hierarchy than P (4). If such an H exist, there might be links in the mapping from C to H that are not available by going through P. Line (6) finds these "non-covered" links, L, in the mapping from C to H by "subtracting" the links that are available by going through P from all the links in the mapping from C to H. Line (7) uses L to find the dimension values N in H that participate in the "non-covered" mappings. For each value in N, line (8) inserts a corresponding marked value into P\ these marked values represent the N values in P. The marked values in P are then linked to the original values in H (9) and C (10). Line (12) changes the schema so that H is no longer a predecessor of C. This can be done safely as the intermediate values and links means that the values in H and C that were connected before are still connected by going through P. Line (13) contains a recursive call to the algorithm P, thus fixing mappings higher up in the hierarchy. The algorithm terminates when it reaches the T category, which has no predecessors. (1) procedure MakeCovering(C) (2) for each P e ImmPred (C) do (3) begin (4) for each H e Pred(C) where Type(H) > Type(P) do (5) begin (6) L «- RC,H \ π c ,H Rc,p X RP,H) (7) N «- U H (L) (8) P -t- P U {Mαrk(h) \ h € N} (9) RP,H <- Rp,H U {(Mαrk(h), h) | h € N} (10) R c ,p <- Rc,P U {(c, Mαrk(h)) | (c, h) € L} (11) end (12) Pred(C) <- Pred(C) \ {H} (13) MakeCovering(P) (14) end (15) end All steps in the algorithm are expressed using standard relational algebra operators. The general worst-case complexity of join is Θ(n 2 ), where n is the size of the input. However, because the input to the algorithm are hierarchy definitions, the complexity of the join in the algorithm will only be C(nlogn). Thus, all the operators used can be evaluated in time O(nlogn), where n is the size of the input. The Mark operation can be performed in 0(1) time. The inner loop of the algorithm is evaluated at most once for each link between categories, i.e., at most k /2 times, where k is the number af categories (if all categories are directly linked to all others). Thus, the overall big-C complexity of the algorithm is 0(k 2 n\ogn), where k is the number of categories and n is the size of the largest participating Rc c 2 relation. The worst- case complexity will not apply very often; in most cases, the inner loop will only be evaluated at most k times. The algorithm inserts new values into the P category to ensure that the mappings from P to higher categories are summarisable, i.e., that pre-aggregated results for P can be directly combined into higher-level aggregate results. The new values in P mean that the cost of materialising aggregate results for P is higher for the transformed hierarchy than for the original. However, if the hierarchy was not transformed to achieve summarisability, we would have to materialise aggregates for G, and perhaps also for higher level categories. At most one new value is inserted into P for every value in G, meaning that the extra cost of materialising results for P is never greater than the cost of the (otherwise necessary) materialisation of results for G. This is a very unlikely worst-case scenario — in the most common cases, the extra cost for P will be much lower than the the cost of materialising results for G, and the savings will be even greater because materialisation of results for higher-level categories may also be avoided. The correctness argument for the algorithm has two aspects. First, the mappings in the hierarchy should be covering upon termination. Second, the algorithm should only make trans- formations that are semantically correct, i.e. , we should get the same results when computing results with the new hierarchy as with the old. The correctness follows from Theorem 1 and 2, below. As new values are inserted in the P category, we will get aggregate values for both the new and the original values when "grouping" by P. Results for the original values will be the same as before, so the original result set is a subset of the result set obtained with the transformed hierarchy. Theorem 1 Algorithm MakeCovering terminates and the hierarchy for the resulting dimension D' is covering. Proof: By induction in the height of the dimension lattice. Base: The height is 0, making the statement trivially true. Induction Step: We assume the statement is true for dimension lattices of height n, and consider lattices of height n+ 1. For termination, we note that there is a finite number of (P,H) pairs, all operations in the inner loop terminate, and the algorithm is called recursively on P, which is the root of a lattice of height n. For the covering property, we note that the insertion of intermediate, marked values into P means that the mapping from P to H is covering w.r.t. C. By the induction hypothesis, the mappings higher in the hierarchy are fixed by the recursive call of the algorithm. Theorem 2 Given dimensions D and D' such that D' is the result of running MakeCovering on D, an aggregate result obtained using D is a subset of the result obtained using D'. Proof: Follows easily from Lemma 1 , next, as the inserted values are "internal" in the hierarchy. Lemma 1 For the dimension D' = (C, <') resulting from applying algorithm MakeCovering to dimension D = (C, <), the following holds: Veι, e 2 e D (ei <' e 2 ■ ■ ei < e 2 ) (there is a path between any two original dimension values in the new dimension hierarchy iff there was a path between them in the original hierarchy). Proof: By induction in the height of the dimension lattice. Base: The height is 0 making the statement trivially true. Induction Step: We assume the statement is true for dimension lattices of height n, and consider lattices of height n + 1. Examing the inner loop, we see that the insertion of intermediate values into P, and the linking of values in C and H to these, only links values in C and H that were linked before. No links or values are destroyed by the inner loop. Thus, the statement is true for the links from C to P, and from C to H. By the induction hypothesis, the statement holds true for the transformations made by the recursive call on P. We see that the original values in the hierarchy are still linked to exactly the same original values as before, as stated by Lemma 1 , although new values might have been inserted in- between the original values. Thus, when evaluating a query using the transformed hierarchy, the results for the original values will be the same as when using the original hierarchy. Assuming only the original result set is desired, results for the new values must be excluded, which is easy to accomplish. The new, "internal" values are marked with "mark=in- ternal", whereas the original values have "mark=original". In order to exclude the new, internal values from the result set, the equivalent of an SQL HAVING clause condition of "mark=original" is introduced into the original query. Non-Onto Hierarchies The second algorithm renders all mappings in hierarchies onto, i.e., all dimension values in non-bottom categories have children. This is ensured by inserting placeholder values in lower categories to represent the childless values. These new values are marked with the original values, making it possible to map facts to the new placeholder values instead of to the original values. This makes it possible to only map facts to the bottom category. Example 7 In the Diagnosis dimension, the "Lung cancer" diagnosis family (ID = 14) has no children. When the algorithm reaches the Diagnosis Family category, it inserts a placeholder value (L14) into the Low-level Diagnosis category, representing the "Lung cancer" diagnosis, and links it to the original value. Facts mapped to the "Lung cancer" value may then instead be mapped to the new placeholder value, ensuring that facts are mapped only to the Low-level Diagnosis Category. A graphical illustration of the transformation is seen in Figure 4. The bold-faced L14 value is the new value inserted, and the thick line between 14 and L14 is the new link inserted. In the algorithm below, P is a parent category, C is a child category, and N holds the parent values with no children. The algorithm works as follows. Given a category P (initially the T category) in line (1), the algorithm goes through all categories C that are (immediate) descendants of P (2). For each C, line (4) finds the values N in P that have no children in C, by "subtracting" the values with children in C from the values in P. For each "childless" value in N, lines (5) and (6), respectively, insert into C a placeholder value marked with the parent value, and links the new value to the original. MakeOnto is then called recursively on C (7). The algorithms terminates when it reaches the ± category, which has no descendants. (1 ) procedure MakeOnto(P) (2) for each C e Desc(P) do (3) begin (5) C «- C U {Mαrk(p) | p <≡ N} (6) R c ,p «- Rc,P U {(Mαrk(p),p) \ p N} (7) MakeOnto(C) (8) end (9) end Following the reasoning in the previous section, we find that the overall big-O complexity is 0(k 2 n log n), where k is the number of categories and n is the size of the largest participating Rc χ ,c 2 relation. However, the complexity will only be O(knlogn) for the most common cases. The MakeOnto algorithm inserts new values into C to ensure that the mapping from C to P is summarisable. Again, this means that the cost of materialising results for C will be higher for the transformed hierarchy than for the original. However, if the new values were not inserted, we would have to materialise results for P, and perhaps also higher categories, as well as C. At most one value is inserted in C for every value in P, meaning that the extra cost for C is never greater than the cost of materialising results for P. As before, this is a very unrealistic scenario, as it corresponds to the case where no values in P have children in C. In most cases, the extra cost for C will be a small percentage of the cost of materialising results for P, and the potential savings will be even greater, because pre-aggregation for higher-level categories may be avoided. As before, the correctness argument for the algorithm has two aspects. First, the map- pings in the hierarchy should be onto upon termination. Second, the algorithm should only make transformations that are semantically correct. The correctness follows from Theorems 3 and 4, below. Again, the result set for the original values obtained using the original hierarchy will be a subset of the result set obtained using the transformed hierarchy. The results for the new values can be excluded from the result set by adding a HAVING clause condition. Theorem 3 Algorithm MakeOnto terminates and the hierarchy for the resulting dimension D' is onto. Proof: By induction in the height of the dimension lattice. Base: The height is 0, making the statement trivially true. Induction Step: We assume the statement is true for dimension lattices of height n, then consider lattices of height n + 1. For termination, we note that there is a finite number of descendants C for each P, that all operations in the loop terminate, and that the algorithm is called recursively on C, which is the top element in a lattice of height n. For the onto property, we note that the insertion of placeholder values into C makes the mapping from C to P onto. By the induction hypothesis, the mappings further down in the lattice are handled by the recursive call. Theorem 4 Given dimensions D and D' such that D' is the result of applying algorithm MakeOnto to D, an aggregate result obtained using D is a subset of the result obtained using D'. Proof: Follows easily from the observation that "childless" dimension values are linked to new, placeholder values in lower categories in one-to-one relationships, meaning that data for childless values will still be counted exactly once in aggregate computations that use the new dimension. Non-Strict Hierarchies The third algorithm renders mappings in hierarchies strict, meaning that problems of "double- counting" will not occur. Non-strict hierarchies occur when one dimension value has several parent values. The basic idea is to "fuse" a set of parent values into one "fused" value, then link the child value to this new value instead. The fused values are inserted into a new category in-between the child and parent categories. Data for the new fused category may safely be re-used for computation of higher-level aggregate results, as the hierarchy leading up to the new category is strict. The fused value is also linked to the relevant parent values. This mapping is by nature non-strict, but this non-strictness is not a problem, as we prevent aggregate results for the parent category from being re-used higher up in the hierarchy. This is done by "unlinking" the parent category from its predecessor categories. The categories higher up are instead reached through the fused category. This means that we can still get results for any original category, while being able to apply practical pre- aggregation throughout the hierarchy. In pre-aggregation terms, the "unlinking" of the parent categories means that we must prevent results for including this category from being materialised — only "safe" categories may be materialised. This should be given as a constraint to the pre-aggregation system that chooses which levels of aggregation to materialise. We note that the algorithm does not introduce more levels in the hierarchy, only more categories, and that the number of "safe" categories in the result is the same as the number of original categories. This means that the complexity of the task of selecting the optimal aggregation levels to materialise is unaffected by the algorithm. Example 8 The result of running the algorithm on the Diagnosis dimension is seen in Fig- ure 5. Because of the non-strictness in the mapping from Low-level Diagnosis to Diagnosis Family, and from Diagnosis Family to Diagnosis Group, two new category types and the corresponding categories are introduced. The third picture indicates the argument to the algorithm; and, in addition, its dotted lines indicate the links deleted by the algorithm. The fourth picture gives the result of applying the algorithm; here, the bold-face values and thick lines indicate the values and links inserted by the algorithm. In the first call of the algorithm the three Low-level Diagnosis values — "(low-level) Lung cancer" (L14); "Insulin dependent diabetes during pregnancy" (5); and "Non insulin dependent diabetes during pregnancy" (6)— are linked to the three new fused values— -"(low-level) Lung cancer" (14); "Diabetes during pregnancy, Insulin dependent diabetes" (4, 9); and "Diabetes during pregnancy, Non insulin dependent diabetes" (4, 10) — and these are in turn linked to "Lung Cancer" (14); "Diabetes during pregnancy" (4); "Insulin dependent diabetes" (9); and "Non insulin dependent diabetes" (10). The these latter four values in the Diagnosis Family category are un-linked from their parents, as the Diagnosis Family category is "unsafe." When called recursively on the Set-of Diagnosis Family category, the algorithm creates the new fused values "Cancer" (13) and "Diabetes, Other pregnancy related diseases" (11 , 12) in the Set-of Diagnosis Group category. These new values are linked to the values "Cancer" (13), "Diabetes" (11), and "Other pregnancy related diseases" (12) in the Diagnosis Group category, and to the T value; and the values in the Diagnosis Group category are un-linked from their parents. Note the importance of having a T value: the values not linked to T are exactly the unsafe values, for which aggregate results should not be re-used. The algorithm assumes that all paths in the dimension hierarchy have equal length, i.e., all direct links are from children to their immediate parents. This is ensured by the MakeCov- ering and MakeOnto algorithms. In the algorithm below, C is a child category, P is a parent category, G is a grandparent category, N is the new category introduced to hold the "fused" values, and M denotes natural join. The algorithm takes a category C (initially the category) as input. I then goes through the set of immediate parent categories P of C (line (2)). Line (4) tests if there is non-strictness in the mapping from C to P and if P has any parents (4). If this test fails, there is no problem as aggregate results for P can either be safely re-used or are guaranteed not be re-used; and the algorithm in then invoked recursively, in line (20). If the test succeeds, the algorithm creates a new fused category. First, a new, empty category N with domain 2 P is created in line (6). The values inserted into this category represent sets of values of P. For example, the value "1, 2" represents the set consisting of precisely 1, 2. Values in C are then linked to to new, fused values, representing their particular combination of parents in P (7). The new values are constructed using a Fuse function, that creates a distinct value for each combination of P values and stores the corresponding P values along with it. The resulting links are used in line (8) to insert the fused values into their category N, and an "Unfuse" function, mapping fused values from N into the corresponding P values, is used in line (9) to map the values in N to those in P. In line (10), N is included in, and P is excluded from, the sets of predecessors of C. The set of predecessors of N is set to P in line (11 ), meaning that the new category N resides in-between C and P in the hierarchy. (1) procedure MakeStrict (C) (2) for each P e Pred(C) do (3) begin (4) if (3eι € C (3e 2 , e 3 € P (ei < e 2 Λ e x < e 3 Λ e 2 ≠ e 3 ))) Λ Pred(P) 0 then (5) begin (6) N 4r- CreαteCαtegory(2 p ) (7) Rc,N • «- {(e λ , Fuse({e 2 \ (e e 2 ) € Rc,p}))} (8) N <- U N (RC,N) (9) RN,P <~ {(ei, e ) | ei € N A e 2 € Unfuse(eι)} (10) Pred(C) 4- Pred(C) U {N} \ {P} (1 1) Pred(N) «- {P} (12) for each G € Pred(P) do (13) begin (14) P Γ,G <- UN,G (RN,P IX Rp,β) (15) Pred(N) •(- Pred(N) U {£} (16) Pred(P) 4- Pred(P) \ {G} (17) end (18) MakeStrict(N) (19) end (20) else MakeStrict(P) (21) end (22) end For each grandparent category G, the algorithm links values in N to values in G, in line (14), includes G in the predecessors of N, in line (15), and excludes G from the predecessors of P, in line (16), thereby also deleting the links from P to G from the hierarchy. The exclusion of the G categories from the predecessors of P means that aggregate results for P will not be re-used to compute results for the G categories. In the end, the algorithm is called recursively on the new category, N. Note that the test for Pred(P) ≠ 0 in line (4) ensures that the mapping from N to P will not be altered, as P now has no predecessors. Following the reasoning in the previous sections, we find that the overall big-O complexity is O(pnklogn\ogk), where p is the number of immediate parent and children categories in the dimension type lattice, n is the size of the largest mapping in the hierarchy, and k is the maximum number of values fused together. For most realistic scenarios, p and k ate small constants, yielding a low <D(nlogn) complexity for the algorithm. The MakeStrict algorithm constructs a new category N and insert fused values in N to achieve summarisability for the mapping from N to P, and from N to G. The algorithm only inserts the fused values for the combinations that are actually present in the mapping from C to P. This means that the cost of materialising results for N is never higher than the cost of materialising results for C. This is a worst-case scenario, for the most common cases the cost of materialising results for N will be be close to the cost of materialising results for P. However, without the introduction of N, we would have to materialise results not only for P, but also for G and all higher-level categories. Thus, the potential savings in materialisation costs are very high indeed. Considering correctness, the mappings in the hierarchy should be strict upon termination, and the algorithm should only make transformations that are semantically correct. More specifically, it is acceptable that some mappings be non-strict, namely the ones from the new, fused categories to the unsafe parent categories. This is so because unsafe categories do not have predecessors in the resulting hierarchy, meaning that aggregate results for these categories will not be re-used. The correctness follows from Theorems 5 and 6, below. When evaluating queries we get the same result for original values as when evaluating on the old hierarchy. The values that are deleted by the algorithm were not linked to any facts, meaning that these values did not contribute to the results in the original hierarchy. As all the new values are inserted into new categories that are unknown to the user, the aggregate result obtained will be the same for the original and transformed hierarchy. Thus, we do not need to modify the original query. Theorem 5 Let D' be the dimension resulting from applying algorithm MakeStrict on dimen- sion D. Then the following hold: Algorithm MakeStrict terminates and the hierarchy for the dimension D", obtained by removing unsafe categories from D', is strict. Proof: By induction in the height of the dimension lattice. Base: The height is 0, making the statement trivially true. Induction Step: Assuming that the statement is true for lattices of height n, lattices of height n + 1 are considered. All steps in the algorithm terminate, and the algorithm is called recursively on either P (in the strict case) or N (in the non-strict case), both of which are the root of a lattice of height n, thus guaranteeing termination. For the strictness property, there are three cases. If the mapping from C to P is already strict, this mapping is not changed, and by the induction hypothesis, the statement holds for the recursive call on P. If the mapping from C to P is non-strict, but P does not have any parents, strictness is ensured, as P is excluded from D". If the mapping is non-strict and P has parents, the resulting mapping from C to N is strict. By the induction hypothesis, the statement holds true for the recursive call on N, as the introduction of N has not increased the height of the lattice. Theorem 6 Given dimensions D and D' such that D' is the result of applying algorithm MakeStrict to D, an aggregate obtained using D' is the same as that obtained using D. Proof: Follows from Lemma 2, as all facts are mapped to values in the J_ category, which is a safe category. Thus, there will be a path from a fact / to an original dimension value e iff there was one in the original hierarchy, meaning that aggregate results computed using the original and the new hierarchy will be same. Lemma 2 For the dimension D' = (C, <') resulting from applying algorithm MakeStrict to dimension D = (C, <), the following holds. Ve l 5 e 2 e D (e x e C x Λ Sαje(C x ) Λ e x <' e 2 ei < e 2 ) (there is a path between an original dimension value in a safe category and any other original dimension value in the new dimension hierarchy iff there was a path between them in the original hierarchy). Proof: By induction in the height of the dimension lattice. Base: The height of the lattice is 0, making the statement trivially true. Induction Step: If either the mapping from C to P is strict, or P does not have any parents, the algorithm does not change the mappings, and by the indiction hypothesis, the statement is true for the recursive call on P. Otherwise, we observe that the creation of fused values in N, and the linking of C, P, and G values to these, only links exactly the values in C and P, or C and G, that were linked before. Because P is not safe, the links from P to G may be deleted. By the induction hypothesis, the statement is true for the recursive call on N. In the method described above, both the original and the new categories are kept in the same hierarchy. An alternative would be to keep the "unsafe" categories and the mappings to them in a separate hierarchy, so that only "safe" categories are kept in the main hierarchy. Fact-Dimension Transformation Techniques This section explains how the set of algorithms from the section "Dimension Transformation Techniques" may also be applied to the relationships between facts and dimensions, thus providing a basis for enabling practical pre-aggregation on concrete MOs that include fact data. The basic idea is to view the set of facts F as the bottom granularity in the lattice. The input to the algorithms then consists of the facts, F, the RF,C tables, describing the mappings from facts to dimension values, and the C and Rc c 2 tables, describing the dimension categories and the mappings between them. Only the covering and strictness properties are considered because for the fact-dimension relationships, a mapping between facts and dimension values that is into means that not ail dimension values in the bottom category have associated facts, which does not affect summarisability. As before, we first apply the MakeCovering algorithm, then the MakeStrict algorithm. The computational complexity of the algorithms will now be dominated by the size, n, of the mapping between facts and dimension values, i.e., the complexity will be O( log ) if we assume the height of the lattice and the maximum number of values fused together to be small constants. This means that the algorithms can be applied to even very large databases. Mixed Granularity Mappings The first case to consider is the one where some of the mappings are non-covering w.r.t. the facts, meaning that not all facts can be reached through these mappings and thus resulting in these facts not being accounted for in aggregate computations. This occurs when some facts are mapped directly to dimension values in categories higher than the J_ category, i.e., the facts are mapped to values of mixed granularities. We use the MakeCovering algorithm to make the mappings covering, initially calling it on F, which is now the bottom of the lattice. The algorithm makes the mappings covering w.r.t. the facts by inserting new marked values, representing the parent values, in the intermediate categories, and by linking the facts to the new values instead of the parent values. As in the section "Non-Covering Hierarchies," the marked values keep information about their original values, so that when new fact-dimension mappings are added, the links that are supposed to go directly to the original parent values now instead can be set to go to the marked value in the ± category. Example 9 In the case study, the mapping between Patients and Diagnoses is of mixed gran- ularity: "John Doe" (1) and "Jane Doe" are both mapped to the Diagnosis Family, "Insulin dependent diabetes" (9), "Jane Doe" is additionally mapped to the Low-level Diagnosis, "Insulin dependent diabetes during pregnancy" (5), and "Jim Doe" is mapped to "Diabetes" (11), a Diagnosis Group. In the first call of the algorithm, two new Low-level Diagnoses are inserted: "L9," repre- senting "Insulin dependent diabetes," and "L11," representing "Diabetes"; and the facts are mapped to these instead of the original values. In the recursive call on Low-level Diagnosis, an "F11" value representing "Diabetes" at the Diagnosis Family level is inserted between "Diabetes" and value "L11." The transformations are illustrated in Figures 6 and 7, where dotted lines indicate links that are deleted by the algorithm and bold-face value and thick lines indicate dimension values and links inserted by the algorithm. Many-To-Many Relationships The second case occurs when relationships between facts and dimension values are many- to-many. This means that the hierarchy, with the facts as the bottom category, is non-strict, leading to possible double-counting of facts. It is enough to make the hierarchy partly strict, as described in the section "Non-Strict Hierarchies." The MakeStrict algorithm is initially called on F, which is now the bottom of the hierarchy lattice. Because the MakeCovering algorithm has already been applied, all paths from facts to the T value have equal length, as required by the MakeStrict algorithm. Some dimension values have no facts mapped to them, leading to an interesting side effect of the algorithm. When the algorithm fuses values and places the fused values in-between the original values, it also deletes the child-to-parent and parent-to-grandparent links. The fact-less dimension values are then left disconnected from the rest of the hierarchy, with no links to other values. These fact-less dimension values do not contribute to any aggregate computations and are thus superfluous. To minimise the dimensions, an "Delete-unconnected" algorithm that deletes the fact-less dimension values by traversing the hierarchy starting at the facts is invoked in a postprocessing step. For a hierarchy of height k, this can be done in time 0(kn\ogn), where n is the size of the mapping between facts and dimensions. Thus, the overall computational complexity is not altered. Example 10 The relationship between patients and diagnoses is many-to-many. In Example 9, the MO was transformed so that all mappings were covering, as seen in Figure 6; algorithm MakeStrict is applied to this MO. The final result of the application of the algorithm is seen in Figure 7. Values in italics, e.g., L14, and dotted lines indicate deleted values and links. Bold-face values and thick lines denote values and links inserted by the algorithm. Three new categories are introduced: "Set-of Low-level Diagnosis," "Set-of Diagnosis Family," and "Set-of Diagnosis Group," as non-strictness occurs at all levels. Fused values are inserted into these fused categories. For example, values "(low-level) Lung Cancer" (L14), "Insulin dependent diabetes during pregnancy, (low-level) Insulin dependent diabetes" (5, L9), and "(low-level) Insulin dependent diabetes" (L9) are inserted into the "Set-of Low-level Diag- nosis" category; and the original values are linked to the new values. Values "(low-level) Lung cancer" (L14), "Lung cancer" (14), "Cancer" (13), "Non insulin dependent diabetes during pregnancy" (6), and "Non insulin dependent diabetes" (10) do not characterise any facts and are deleted by "Delete-unconnected." Architectural Context Overview The overall idea presented in this paper is to take un-normalised MOs and transform them into normalised MOs that are well supported by the practical pre-aggregation techniques available in current OLAP systems. Queries are then evaluated on the transformed MOs. However, we still want the users to see only the original MOs, as they reflect the users' understanding of the domain. This prompts the need for means of handling both the original and the transformed MOs. This section explores this coexistence. A current trend in commercial OLAP technology is the separation of the front-end presentation layer from the back-end database server. Modern OLAP applications consist of an OLAP client that handles the user interface and an OLAP server that manages the data and processes queries. The client communicates with the server using a standardised application programming interface (API), e.g., Microsoft's OLE DB for OLAP [17] or the OLAP Council's MDAPI [20]. The architecture of such a system is given to the left in Figure 8. This separation of client and server facilitates our desire to have the user see the original MO while queries are evaluated against the transformed MO. Studies have shown that queries on a data warehouse consist of 80% navigational queries that explore the dimension hierarchies and 20% aggregation queries that summarise the data at various levels of detail [14]. Examples of navigational and aggregation queries are "Show me the Low-Level Diagnoses contained in the Insulin-Dependent Diabetes Diagnosis Family" and "Show me the count of patients, grouped by Diagnosis Family," respectively. The navigational queries must be performed on the original MO, while the aggregation queries must be performed on the transformed MO. This is achieved by introducing an extra "Query Handler" component between the client and the server. The OLAP client sends a query to the query handler, the primary task of which is to determine whether the query is a navigational query (internal to a dimension) or an aggregation query (involving the facts). Navigational queries are passed to one OLAP server that handles the original (navigational) data, while aggregation queries are passed to another OLAP server that manages the transformed (aggregation) data. This extended system architecture is seen to the right in Figure 8. The OLAP server for navigation data needs to support dimension hierarchies which have non-summarisable properties, a requirement not yet supported by many commercial systems today. However, relational OLAP systems using snow-flake schemas [14] are able to support this type of hierarchies, as are some other OLAP systems, e.g., Hyperion (Arbor) Ess- base [12]. If the OLAP system available does not have sufficiently flexible hierarchy support, one solution is to build a special-purpose OLAP server that conforms to the given API. This task is not as daunting as it may seem at first because only navigational queries need to be supported, meaning that multidimensional queries can be translated into simple SQL "lookup" queries. We note that the only data needed to answer navigational queries is the hierarchy definitions. Thus, we only need to store the fact data (facts and fact-dimension relations, in our model) once, in the aggregational data, meaning that the overall storage requirement is only slightly larger than storing just the aggregational data. Navigational queries are evaluated on the original hierarchy definitions and do not need to be re-written by the query handler. As described in the section "Dimension Transformation Techniques," aggregation queries need to be re-written slightly by adding an extra HAVING clause condition to exclude results for the new values inserted by the transformation algorithms. This can easily be done automatically by the query handler, giving total transparency for the user. Even though the added HAVING clause conditions are only necessary for the covering and onto transformations, they can also be applied to hierarchies transformed to achieve strictness; this has no effect, but simplifies the query rewriting. The new values can also be filtered out using a modified WHERE clause, by performing an inner join with a table containing only the original values, or by using nested SELECT statements as described in the next section. Concrete Implementation We now show how the abstract architecture described above can be implemented using standard relational database technology. The transparency is achieved by working with two versions of each user-specified hierarchy and by using a query rewrite mechanism. This is described in detail later in this section. The overall system architecture is seen in Figure 9. Table 2: DDiagnosis Dimension Table The ROLAP client tool, in this case the ROLAP tool Synchrony, which originated from Kimball's Startracker tool [14], makes SQL requests to the ROLAP database, in this case the Oracleδ RDBMS, using the ODBC standard. We have implemented a special, query- transforming ODBC driver (QTOD) that, based on case-specific metadata, transforms the SQL requests into requests that hide the transformations from the users, returning the query results that the user would expect based on the original hierarchies. A transformed request is submitted to the OLAP DB using an RDBMS-specific ODBC driver. The QTOD component is common to all RDBMSs, so Oracleδ may be replaced by another RDBMS such as IBM DB2, Informix, or MS SQL Server. Another ROLAP tool may also be used, making the solution quite general and flexible. We have chosen to base the prototype on an RDBMS (Oracleδ) since RDBMSs are the most commonly used platform for Data Warehouse and OLAP applications. Additionally, the major RDBMSs now, like dedicated multidimensional DBMSes (MDDBs), use pre-aggregated data for faster query responses [30]. However, the approach could also be implemented using multidimensional technology, e.g., based on the Microsoft OLE DB for OLAP standard [17]. The transformation algorithms are implemented in Oracle's PL/SQL programming language. The transformations are relatively fast, taking at most a few minutes, even for large dimensions. Once the dimension hierarchies have been transformed, the QTOD transforms queries and results between the original and transformed hierarchies. The QTOD is a thin layer and adds very little overhead to queries. It is implemented using GNU Flex++/Bison++ scanner/parser generators and the MS Visual C++ compiler. The two types of queries, navigation queries and aggregation queries, are treated differently to give the user the illusion that the dimension hierarchies have their original form. The multidimensional data is captured in a star schema [14]. The dimension table for the Diagnosis dimension is given in Table 2, which has one column for the low-level diagnosis ID in addition to columns for the textual descriptions of low-level diagnoses, diagnosis families, and diagnosis groups. The hierarchy captured in the table is partially normalised, i.e., placeholder values have been introduced to balance the hierarchy (but it remains non-strict). Specifically, the "ILowleveMLung Cancer" placeholder value has been inserted into the Low-level Diagnosis level. We prefix such values with a "!" and their level to indicate that they are inserted by the transformation process. Note the multiple occurrences of lower-level values caused by the non-strictness of the hierarchy. This is the table that will be used for user navigation in the hierarchy. Its name is prefixed with a "D" to distinguish it from another "Diagnosis" dimension table (described below), to be used for aggregation queries. We now describe how to achieve transformation transparency for navigational queries. The query below retrieves all low-level diagnosis names. SELECT DISTINCT Lo level FROM Diagnosis Navigational queries issued by ROLAP tools have exactly this format. The query is transformed by the QTOD into the query seen next, which operates against the table DDiagnosis. The transformed query returns the result seen in Table 3. SELECT DISTINCT Lowlevel FROM DDiagnosis WHERE Lowlevel NOT LIKE Lowlevel Insulin dependent diabetes during pregnancy Non insulin dependent diabetes during pregnancy Table 3: Navigational Query Result Due to the use of DISTINCT as a quantifier, duplicates are not returned. The NOT LIKE predicate removes the placeholder values inserted into the hierarchy to balance it, which in this case is the value "ILowlevellLung Cancer." As desired, the result is unaffected by the translations. For aggregation queries, it is also possible to achieve transformation transparency, although this is more difficult. For dimensions with non-strictness, a special dimension table is introduced that holds only the part of the normalised hierarchy that does not contain non- strictness. In the normalised hierarchy to the right in Figure 5, this part is the Low-level Diagnosis category and the two special categories introduced by the normalisation process to hold sets of diagnosis families and sets of diagnosis groups, respectively. This part of the hierarchy is implemented in the Diagnosis dimension table seen in Table 4. Diagnosis SGroup Table 4: Dimension and Group Tables for Aggregation The "Lowlevel" column contains the normal textual diagnosis description, whereas the special "Family" and "Group" columns contain comma-separated ordered lists of the IDs of the sets of values that are represented by the column values. For example, value "4,9" represents the set {4, 9}. We need to capture the remaining part of the hierarchy, which consists of non-strict map- pings from a "set-of-X" category to the "X" category, e.g., the mapping of the "set-of-Diagnosis Group" category to the "Diagnosis Group" category to the right in Figure 5, which maps {13} to 13 (Cancer) and {11, 12} to 11 (Diabetes) and 12 (Pregnancy Related). This is done by introducing a special table for each such mapping, named by the category prefixed with an "S" (for Set-of). For example, for the Diagnosis Group category, table "SGroup" in Table 4 maps sets of diagnosis groups to the individual diagnosis groups in the sets. The "Group" column represents the diagnosis group, while the "SGroup" column represents the associated set of diagnosis groups. With these tables available, it is possible to obtain transformation transparency for aggregation queries. A ROLAP aggregation query has the format of the query below that computes the number of patients per diagnosis group. SELECT Diagnosis.Group, SUM (Patient .Count) FROM Diagnosis, Patient WHERE Diagnosis .DιagID=Patιent .DiagID GROUP BY Diagnosis. Group This is transformed into the more complex query given next. SELECT SGroup . Group, SUM (QQQQQQQ . Count ) FROM Sgroup, (SELECT Diagnosis . Group, SUM (Patient . Count ) AS Count FROM Diagnosis, Patient WHERE Dιagnos s . DιagID=Patιent . DiagID GROUP BY Diagnosis . Group) QQQQQQQ WHERE QQQQQQQ . Group=SGroup . SGroup AND SGroup . SGroup NOT LIKE ' ! % ' GROUP BY SGroup . Sgroup The transformed aggregation query has two parts. The nested table expression computes the number of patients per set of diagnosis group, making this available via correlation name QQQQQQQ. This part of the hierarchy is a balanced tree, so the RDBMS can safely use pre-aggregated data for optimising the query performance. The result of the nested table expression is used in the outer query, which aggregates the last part of the way up to the diagnosis groups using the "SGroup" table. The outer query also filters out any placeholder values inserted by the normalisation process (prefixed with a "!"). As a result, the client OLAP tool will retrieve the expected result. Good query performance without the use of excessive storage for pre-aggregated data is obtained by using practical pre-aggregation for the "nice" part of the hierarchy captured in the "Diagnosis" dimension table. The query transformation exemplified here can be performed for all ROLAP aggregation queries, making the solution quite general. Incremental Computation When dimension hierarchies or fact data are updated, the transformed hierarchies must be updated correspondingly. One solution is to recompute the hierarchies using the new data. This straightforward solution is attractive when updating small dimension hierarchies that only change infrequently, or when large bulks of updates are processed. However, for massive hierarchies and frequent updates, and for updates of small parts of the hierarchies in general, it is desirable if the algorithms need only consider the changed parts of data, which will only be a small fraction of the total data volume. This section briefly describes how to incrementalise the algorithms. In addition to modifying the transformed hierarchies, it is also necessary to update the actual pre-aggregated data when the underlying base data is modified. The modified hierarchies resulting from the algorithms given in this section differ only locally from the argument hierarchies. This means that the cost of updating the pre-aggregated data will not be greatly affected by the hierarchy transformations. In the incremental algorithms, updates are modeled as deletions followed by insertions, so we consider only the latter two modification operations. We use prefix Δj to denote inserted values, A d to denote deleted values, and Δ to denote all modifications. For example, Δ,C denotes the values inserted into C. The category and links tables in the algorithms refer to the states after modifications; and when a hierarchy value is deleted, all links to that value are also assumed to be deleted in the same set of modifications. Covering Hierarchies Modifications may render covering hierarchies non-covering in several ways. The the leftmost table in Table 5, named "Covering" and discussed next, indicates whether an insertion ("Insert") or a deletion ("Delete") on the different parts of the input to MakeCovering may render the modified hierarchy non-covering. Covering Onto Strict Table 5: Effects of Insertions and Deletions on the Covering, Onto, and Strictness Properties Problems may arise if links are inserted into R C , that are not covered by insertions into R c ,p and RP,H, or if links are deleted in R c ,p or RP,H, but the corresponding C-to-H links are not deleted in RC,H- If values are deleted in P or H, their links will be deleted too, which is handled by the case above. Values cannot be inserted into C without any links, as all values in the original hierarchy must at least be linked to the T value. The incremental version of MakeCovering algorithm starts by finding (in line (6)) the links L from C to H that are not covered by the links from C to P and P to H. These links are used as the base for the rest of the transformation. Thus, line (6) of the algorithm becomes the following expression. L <- AiRcH u n c , H ( d Rc,P X RP,H) U U C ,H (RC,P * Δd p,H) \ nc,H(AiRc,p * iRp tH ) \ d Rc, H Onto Hierarchies The effects on the onto property of insertions and deletions are outlined in the middle table in Table 5. Insertion of values into P, deletion of values in C, and deletion of links in R c ,p may cause the hierarchy to become non-onto. The incremental version of the MakeOnto algorithm thus starts by finding (in line (4)) the "childless" values N from P with no children in C. As a result, line (4) of the algorithm becomes the following expression. N <- Δ P U Up(A D R c ,p) \ U P (A d P) \ p(A i R c , P ) Strict Hierarchies The case of maintaining the strictness property of hierarchies is more complicated because a new category N is introduced by the algorithm. We assume that all new categories have already been created before the incremental algorithm is used, i.e., if non-strictness is intro- duced in new parts of the hierarchy, we have to recompute the transformed hierarchy. The introduction of non-strictness requires major restructuring of both the hierarchy and the pre- aggregated data, so this is reasonable. An overview of the effect on strictness of insertions and deletions in the input to algorithm MakeStrict is given in the right-most table in Table 5. If links are inserted into, or deleted from, Rc,p or Rp >G , the links to JV for the affected C, P, and G values must be recomputed. Insertions into, or deletion from, C, P, or G will be accompanied by corresponding link insertions and deletions, so they are handled by the above case. The incremental MakeStrict, given below, works by finding the affected C, P, and G values, then recomputes their links to N and deletes the old links, and finally inserting the new links. As before, it is followed by a step that deletes the disconnected parts of the hierarchy. (1) procedure IncrementalMakeStrict(C) (2) for each P € Pred(C) such that Pred(P) ≠ 0 do (3) begin (4) dC «- c(AR c ,p) (5) dR c ,N *- {(c, Fuse({p \ (c,p) ε dC M R c ,p})} (6) dN «- U N (dR c , N ) (7) N 4- N U dN (8) R C ,N <- RC,N \ {(c, n) | c € dC} U dR c , N (9) dP «- π P (ΔP C)P ) (10) dR N ,p <- {(n,p) \ n e dN Λp e dP n UnFuse(n)} (1 1 ) RN,P +- RN,P \ {(n,p) \ p € dP} U dR N>P (12) for each G e Pred(P) do (13) begin (14) dG +- π G (AR PjG U (dP M R P , G )) (15) RN,G <r- RN,G {(n, g) \ g £ dG} U NjG (R NtP R Pfi M dG) (16) end (17) IncrementalMakeStrict(N) (18) end (19) end References [1] E. Baralis, S. Paraboschi, and E. Teniente. Materialized View Selection in a Multidimensional Database. In Proceedings of the Twenty-Third International Conference on Very Large Data Bases, pp. 156-165, 1997. [2] E. F. Codd. Providing OLAP (on-line analytical processing) to user-analysts: An IT mandate. Technical report, E.F. Codd and Associates, 1993. [3] S. Dar, H. V. Jagadish, A. Y. Levy, and D. Srivastava. Answering SQL Queries Using Views. In Proceedings of the Twenty-Second International Conference on Very Large Data Bases, pp. 318-329, 1996. [4] P. M. Deshpande, J. F. Naughton, K. Ramasamy, A. Shukla, K. Tufte, and Y. Zhao. Cubing Algorithms, Storage Estimation, and Storage and Processing Alternatives for OLAP. IEEE Data Engineering Bulletin, 20(1 ):3-11 , 1997. [5] C. E. Dyreson. Information Retrieval from an Incomplete Data Cube. In Proceedings of the Twenty-Second Conference on Very Large Databases, pp. 532-543, 1996. [6] J. Gray, S. Chaudhuri, A. Bosworth, A. Layman, D. Reichart, M. Venkatrao, F. Pellow, and H. Pirahesh. Data Cube: A Relational Aggregation Operator Generalizing Group- By, Cross-Tab and Sub-Totals. Data Mining and Knowledge Discovery, 1 (1 ):29-54, 1997. [7] A. Gupta, V. Harinarayan, and D. Quass. Aggregate Query Processing in Data Warehousing Environments. In Proceedings of the Twenty-First International Conference on Very Large Data Bases, pp. 358-369, 1995. [δ] H. Gupta, V. Harinarayan, A. Rajaraman, and J. Ullman. Index Selection for OLAP. In Proceedings of he Thirteenth International Conference on Data Engineering, pp. 208- 219, 1997. [9] H. Gupta. Selection of Views to Materialize in a Data Warehouse. In Proceedings of the Sixth International Conference on Database Theory, pp. 98-112, 1997. [10] H. Gupta and I.S. Mumick. Selection of Views to Materialize Under a Maintenance-Time Constraint. In Proceedings of the Seventh International Conference on Database Theory, pp. 453^170, 1999. [11] V. Harinarayan, A. Rajaraman, and J.D. Ullman. Implementing Data Cubes Efficiently. In Proceedings of the ACM SIGMOD International Conference on the Management of Data, pp. 205-216, 1996. [12] Hyperion Corporation. Hyperion Essbase OLAP Server. URL: <www.hyperion. com/down loads/essbaseolap.pdf>. Current as of February 17, 1999. [13] Informix Corporation. Data Warehouse Administrator's Guide: MetaCube ROLAP Option for Informix Dynamic Server. URL: <www.informix.com/answers/ english/pdf_docs/metacube/4189.pdf>. Current as of February 15, 1999. [14] R. Kimball. The Data Warehouse Toolkit. Wiley Computer Publishing, 1996. [15] R. Kimball. Data Warehouse Architect: Help with Multi- Valued Dimension. DBMS Magazine, 11(9), 1998. [16] H. Lenz and A. Shoshani. Summarizability in OLAP and Statistical Data Bases. In Proceedings of the Ninth International Conference on Statistical and Scientific Database Management, pp. 39-4δ, 1997. [17] Microsoft Corporation. OLE DB for OLAP Version 1.0 Specification. Microsoft Technical Document, 199δ. [1δ] Microsoft Corporation. OLAP Services White Paper. URL: <www.microsoft.com/ sql/70/whpprs/olapoverview.htm>. Current as of February 9, 1999. [19] I. S. Mumick, D. Quass, and B. S. Mumick. Maintenance of data cubes and summary tables in a warehouse. In Proceedings of the ACM SIGMOD International Conference on the Management of Data, pp. 100-111 , 1997. [20] The OLAP Council. MDAPI Specification Version 2.0. OLAP Council Technical Document, 199δ. [21] The OLAP Report. Database Explosion. URL: <www.olapreport.com/Database- Explosion.htm>. Current as of February 10, 1999. [22] T. B. Pedersen and C. S. Jensen. Multidimensional Data Modeling for Complex Data. In Proceedings of the Fifteenth International Conference on Data Engineering, 1999. Extended version available as TimeCenter Technical Report TR-37, URL: <www.cs.auc.dk TimeCenter>, 1996. 4δ [23] T. B. Pedersen, C. S. Jensen, and C. E. Dyreson. Extending Practical Pre-Aggregation in On-Line Analytical Processing. In Proc. VLDB, pp. 663-674, 1999. Extended version available as TR R-99-5004, Dept. of Comp. Sci. Aalborg University, <www.cs.auc.dk/ ~tbp/articles/R995004.ps>, 1999. [24] D. Quass and J. Widom. On-Line Warehouse View Maintenance for Batch Updates. In Proceedings of the ACM SIGMOD International Conference on the Management of Data, pp. 393-404, 1997. [25] M. Rafanelli and A. Shoshani. STORM: A Statistical Object Representation Model. In Proceedings of the Fifth International Conference on Statistical and Scientific Database Management, pp. 14-29, 1990. [26] A. Segev and J. L. Zhao. Selective View Materialization in Data Warehousing Systems. Working paper, URL: <ftp://segev.lbl.gov/pub/LBL_DB_PUBLICATIONS/1997/aggreg- dw.ps>. Current as of February 9, 1999. [27] A. Shukla, P. M. Deshpande, J. F. Naughton, and K. Ramasamy. Storage Estimation for Multidimensional Aggregates in the Presence of Hierarchies. In Proceedings of the Twenty-Second International Conference on Very Large Data Bases, pp. 522-531 , 1996. [2δ] D. Theodoratos and T. Sellis. Data Warehouse Configuration. In Proceedings of the Twenty-Third International Conference on Very Large Data Bases, pp. 126-135, 1997. [29] J. Widom. Research Problems in Data Warehousing. In Proceedings of the Fourth International Conference on Information and Knowledge Management, pp. 25-30, 1995. [30] R. Winter. Databases: Back in the OLAP game. Intelligent Enterprise Magazine, 1 (4):60- 64, 1996. [31] World Health Organization. International Classification of Diseases (ICD-10). Tenth Revision, 1992. [32] J. Yang, K. Kariapalem, and Q. Li. Algorithms for materialized view design in a data warehousing environment. In Proceedings of the Twenty-Third International Conference on Very Large Data Bases, pp. 136-145, 1997.

Claims: CLAIMS 1. A method for by means of a computer to at least partly aggregation normalise a dimension having dimension values organised into categories of dimension values based on a partial ordering, the dimension comprising mappings of links between dimension values, the method comprising the steps of retrieve the mapping from data storage means associated with the computer, analysing the mapping to determine irregularities of the dimension by means of analysing means executed by the computer, creating new dimension values of the dimension and modifying the mapping between dimensional values of the dimension according to the analysis, whereby the dimension is at least partly aggregation normalised, and saving the new dimension values and the modified mappings in data storage means of the computer. 2. A method according to claim 1 , wherein the step of creating new dimensional values and modifying the mapping comprises the step of executing a make-strict procedure for making the dimension aggregation strict, thereby making the non-strict dimension aggregation normalised, the make-strict procedure being executed on the condition that the dimension is covering as well as onto prior to the execution. 3. A method according to claim 1 or 2, wherein the step of creating new dimensional values and modifying the mapping comprises the step of executing a make-onto procedure for making the dimension onto, thereby at least partly making an into dimension aggregation normalised, the make-onto procedure being executed on the condition that the dimension is covering prior to the execution. 4. A method according to any of claims 1-3, wherein the step of creating new dimensional values and modifying the mapping comprises the step of executing a make-covering procedure for making the dimension covering, thereby at least partly making a non-covering dimension aggregation normalised. 5. A method according to any of claims 2-4, wherein the make-strict procedure comprises the steps of, starting from the bottom category and successively proceeding towards the top category, identifying combinations of dimensional values of the same category for each of which combination at least one dimension value of a category below said category is linked to each of the dimension values of the combination, creating one or more new dimensional values each representing one of the identified combinations of dimensional values and creating links from the new dimensional values to dimensional values of above categories in accordance with existing links from each of the dimensional values represented by the new dimensional value, and identifying dimension values being linked to identified combinations of dimensional values of the same category and replacing the links with links to new dimensional values representing said combinations of dimensional values. 6. A method according to any of claims 2-5, wherein the make-strict procedure comprises the successive steps of (i) setting the bottom category of the dimension as the child category, (ii) for each category being a direct predecessor of the child category of which category at least one dimension value of the child category is linked to a dimension value of, setting said category as the parent category and performing the steps of: (iia) ending the make-strict procedure for the parent category in case the parent category is the top category of the dimension, (iib) ending the make-strict procedure for the parent category in case no dimension value of the parent category is linked to a dimension value of a higher category, (iic) creating a new fused category in the dimension immediately below the parent category in case at least one of the dimension values of the child category is linked to more than one dimension value of the parent category, (iid) for each dimensional value of the child category, performing the steps of: creating a new dimension value of the new fused category representing the one or more values of the parent category to which the dimensional value of the child category is linked and creating links from said new dimension value to said values in the parent category, the creation of the new dimension value being conditioned that no dimension value of the new fused category already exists having exactly such link(s), and for each category being a direct predecessor of the parent category of which category at least one dimension value of the parent category is linked to a dimension value of, setting said category as a grandparent category and creating links from the new dimension value to the one or more dimension values of the grandparent category to which said one or more dimensional values of the parent category are linked, (iie) removing the links from the parent category to the one or more grandparent categories, whereby the grandparent categories no longer are direct predecessors of the parent category, (iif) creating links from each dimensional value of the child category to the dimension value of the new fused category having the same links to the dimension values of the parent category whereby the new fused category becomes a direct predecessor of the child category, and removing the links from the dimension values of the child category to the parent category, whereby the parent category no longer is a direct predecessor of the child category, and (iig) setting the new fused category as the child category and returning to step (ii). 7. A method according to any of claims 3-6, wherein the make-onto procedure comprises the steps of, starting from the to category and successively proceeding towards the bottom category, creating, for each dimension value of each category above the bottom category not being linked to any dimensional value of the category immediately below, a new dimension value in the category immediately below and creating a link between said new dimension value and said dimension value of the category in question. 8. A method according to any of claims 3-7, wherein the make-onto procedure comprises the successive steps of (i) setting the top category of the dimension as the parent category, (ii) for each category immediately below the parent category and having dimension values being linked to dimension values of the parent category, setting said category as the child category and perform the steps of (iia) creating, for each dimension value of the parent category not being linked to any dimensional value of the child category, a new dimension value in the child category and creating a link between said new dimension value and said dimension value of the parent category, (iib) setting the child category as parent category, (iic) ending the make-onto procedure in case the parent category is the bottom category of the dimension, else returning to step (ii) of the make-onto procedure. 9. A method according to any of claims 4-8, wherein the make-covering procedure comprises the successive steps of identifying links between dimension values of two categories having at least one intermediate category there between, creating a new dimension value in each of said intermediate categories for each of those links for which no paths of links exists going only through immediate child-parent links from lower to higher categories and including a link to a dimension value of the intermediate category, and replacing those links with links between the dimension values of those links and the new dimension values. 10. A method according to any of claims 4-9, wherein the make-covering procedure comprises the successive steps of (i) setting the bottom category of the dimension as the child category, (ii) for each category immediately above the child category for which at least one link between a dimension value of said category and a dimension value of the child category exists, setting the category as the parent category and perform the steps of: (iia) ending the make-covering procedure for the parent category in case the parent category is the top category of the dimension:, (iib) for each higher category being a direct predecessor category of the child category and being higher in the hierarchy than the parent category, performing the steps of (iiba) identifying sets of dimension values of the higher category and dimension values of the child category for which sets a link exists, and no paths of links going only from lower to higher categories and including a link to a dimension value of the parent category exists, and (iibb) creating for each identified set of dimension values a new dimension value in the parent category, creating links between each of the dimension values of the set and the new dimension value, and removing the link between the two dimension values of the identified set, whereby the higher category no longer is a predecessor of the child category, (iic) setting the parent category as the child category and returning to step (ii). 11. A method for by means of a computer to at least partly aggregation normalise a multidimensional object including a set of facts comprising a plurality of facts mapped on a plurality of dimensions having dimension values organised into categories of dimension values based on a partial ordering, the multidimensional object comprising mappings of links between dimension values within each dimension, by means of applying the method of any of claims 1-10 to at least one of the dimensions of the multidimensional object. 12. A method according to claim 11 , wherein the multidimensional object comprises a plurality of facts and the mapping comprises links from each of the facts to at least one dimension value in each of the plurality of dimensions, the facts constituting the bottom layer of each of the dimensions of the multidimensional object. 13. A method according to claim 11 or 12, wherein one or more of the dimensions of the multidimensional object is only partly aggregation normalised, the performance of the partly aggregation normalisation being based on a selection of a subset of categories of the one or more dimension to be aggregation normalised. 14. A method according to any of claims 1 1-13, wherein one or more of the dimensions of the multidimensional object is only partly aggregation normalised, the normalisation steps to be performed being selected by means of the computer based on a selection of specific aggregation functions to be performed on the multidimensional object. 15. A method for by means of a computer to at least partly aggregation normalise a multidimensional object including a set of facts comprising a plurality of facts mapped on an aggregation normalised plurality of dimensions having dimension values being organised into categories of dimension values based on a partial ordering, the multidimensional object comprising mappings of links between dimension values within each dimension, the method comprising the steps of retrieve the mapping from data storage means associated with the computer, t 4 including the mapping of the plurality of facts on the multidimensional object into the mapping of the multidimensional object so that the mapping comprises links from each of the facts to at least one dimension value in each of the plurality of dimensions, and the facts constitutes the bottom layer of each of the dimensions of the multidimensional object, analysing the mapping of the multidimensional object to determine irregularities of the dimensions by means of analysing means executed by the computer, creating new dimension values of the multidimensional object and modifying the mapping between dimensional values of the multidimensional object according to the analysis, whereby the multidimensional object is at least partly aggregation normalised, and saving the new dimensions and the modified mapping in data storage means of the computer. 16. A method according to claim 15, wherein the step of creating new dimensional values and modifying the mapping comprises the step of executing a make-strict procedure for making the multidimensional object aggregation strict, thereby making the non-strict multidimensional object aggregation normalised, the make-strict procedure being executed on the condition that the multidimensional object is covering prior to the execution. 17. A method according to claim 15 or 16, wherein the step of creating new dimensional values and modifying the mapping comprises the step of executing a make-covering procedure for making the multidimensional object covering, thereby at least partly making the non-covering multidimensional object aggregation normalised. 18. A method according to any of claims 15-17, wherein the method comprises the initial step of making each of the plurality of dimensions aggregation normalised by means of the method according to any of claims 1-10. 19. A method according to any of claims 11-18, wherein the created new dimensional values are marked as such, a pre-aggregation is performed on a multidimensional object being normalised by means of the computer according to the method and the method further comprises the step of WO 01/08041 ,-c PCT/DK00/00354 producing a reply to a query made to the system and concerning the multidimensional object, aggregate queries as well as navigation queries, in which reply the existence of the created new dimensional values is transparent. 5 20. A method according to any of claims 11-19, further comprising the steps of implementing, into the aggregation normalised multidimensional object, of new facts including mapping of the facts onto the dimension, of new dimension values of the dimensions, or of new mapping between some of the dimension values, by which implementation irregularities of the multidimensional object is introduced, 10 analysing the introduced irregularities of the dimensions of the multidimensional object, creating new dimensional values of the multidimensional object and modifying the mapping between dimensional values of the multidimensional object according to the analysis, whereby the multidimensional object is aggregation normalised, and 15 saving the new dimensions and the modified mapping in data storage means of the computer. 21. A computer system comprising at least one general purpose computer having data storage means associated therewith on which data storage means is stored a computer 20 programme product suitable for adapting the computer to perform an at least partly aggregation normalisation of a multidimensional object according to the method of any of claims 11-20, the computer system comprising means for retrieving the computer programme product and perform accordingly. 25 22. A computer programme product suitable for adapting a general purpose computer to perform an at least partly aggregation normalisation of a multidimensional object according to the method of any of claims 11-20. 23. A computer system having data storage means associated therewith on which a 30 multidimensional object is stored, the multidimensional object including a set of facts comprising a plurality of facts, a first plurality of dimensions having dimension values being organised into categories of dimension values based on a partial ordering and comprising a first mapping of links between dimension values within each dimension of the first plurality of 35 dimensions as well as links between the facts and the dimensions of the first plurality of dimensions, at least one of the dimensions of the first plurality of dimensions being irregular, and a second plurality of dimensions having dimension values being organised into categories of dimension values based on a partial ordering and comprising a second 5 mapping of links between dimension values within each dimension of the second plurality of dimensions as well as links between the facts and the dimensions of the second plurality of dimensions, each of the second plurality of dimensions being aggregation normalised, the computer system comprising a query handler component being adapted for 10 producing replies to queries made to the computer system and concerning the multidimensional object, the replies to navigation queries being based on the first set of dimensions and the replies to aggregate queries being based on the second set of dimensions. 15 24. A computer system according to claim 23, wherein a set of pre-aggregation data relating to the second plurality of dimensions is further stored within the data storage means and the replies to aggregate queries furthermore are based on the set of pre- aggregation data. 20 25. A computer system according to claim 23 or 24, wherein the query handler component is adapted for producing replies to aggregate queries in which replies the existence of the second plurality of dimensions is transparent. 26. A computer system according to claim 25, wherein the query handler component is 25 adapted for transforming aggregate queries made to the first plurality of dimensions into queries for the second set of dimensions and transforming replies based on the second set of dimensions into replies as based on the first set of dimensions, thus making the existence of the second plurality of dimensions transparent in the produced reply. 30 27. A computer system according to claim 26, wherein the multidimensional object is stored within the data storage means of the computer system in tables organised as a combination of star schemes for the part of the multidimensional object containing only strict mappings, and additional tables containing the non-strict part of the mappings, the query handler component makes use of said tables in transforming queries and replies. 35 28. A computer system according to any of claims 23-27 further comprising means adapted for performing an at least partly aggregation normalisation of a multidimensional object according to the method of any of claims 11-20.

Inventors: DYRESON CURTIS E, JENSEN CHRISTIAN S, PEDERSEN TORBEN BACH, DYRESON, CURTIS, E., JENSEN, CHRISTIAN, S., PEDERSEN, TORBEN, BACH
Applicants: DYRESON CURTIS E, JENSEN CHRISTIAN S, MINDPASS AS, PEDERSEN TORBEN BACH, DYRESON, CURTIS, E., JENSEN, CHRISTIAN, S., MINDPASS A/S, PEDERSEN, TORBEN, BACH
Application year: 2000
Main classification: G06F17
IPC codes: G06F17