<img alt="" src="https://secure.perk0mean.com/173045.png" style="display:none;">

Great research starts with great data.

Learn More
More >
Patent Analysis of

SYSTEM AND METHOD OF READY TO RENDER BUSINESS INTELLIGENCE RESULT SETS

Updated Time 15 March 2019

Patent Registration Data

Publication Number

CA2551197A1

Application Number

CA2551197

Application Date

23 June 2006

Publication Date

13 March 2007

Current Assignee

COGNOS INCORPORATED

Original Assignee (Applicant)

COGNOS INCORPORATED

International Classification

G06F17/00,G06Q10/06,G06F17/30

Cooperative Classification

G06F17/30592,G06Q10/10,G06F16/283

Inventor

AZIZI SOUFIANE,CUSHING DAVID

Abstract

A method of providing metadata and data based on an arbitrary request for information, relative to a original report layout specification, in such a manner that a software process can render the results of the request far information using only the original report layout specification and the results of the proposed method without any knowledge of the underlying data source or the request posed to retrieve data is provided. Also provided is a method that for each report specified in an original report layout specification a master dataset is returned that provides access to a dataset informational object and a partial dataset data retrieval object.

Read more

Claims

What is claimed is: 1, A method of providing metadata and data based, on an arbitrary request for information, relative to a original report layout specification, in such a manner that a software process renders the results of the request for information using only the original report layout specification and the results of the proposed method without any knowledge of the underlying data source or the request posed to retrieve data 2. A method that for each report specified in an original report layout specification a master dataset is returned that provides access to: a dataset informational object; and a partial dataset data retrieval object.

3. A method as claimed in claim 2, wherein the dataset informational object provides access to: the name of the report within the original report layout specification upon which the dataset informational object is based; the name of the query upon which the data is based. This information may be required by a rendering, or other, component when resolving master/detail report relationships; the number of edges in the result set; informational objects describing each edge of a result set, the order of those objects based on their ordinal value in the original report layout specification; and an optional rowset informational object describing the rowset containing cell values.

4. A method as claimed in claim 3, wherein the edge informational object provides access to: the name of the edge, if specified in the original report layout specification; the number of coordinates along the edge which are related to cell values in the case of a multi-edge report; the number of rowsets contained within the edge; and a collection of informational objects describing each rowset contained with the edge.

5. A method as claimed in claim 3, wherein the rowset informational object provides access to: the name of the value set from the original report layout specification upon which the rowset is based; the unique identifier of the rowset within the context of the edge in which it exists; . the number of rows and columns in the rowset; the unique identifiers of the rowsets that represent the header, footer, parent, child, or next rowset of the rowset, where applicable; a description of each column contained within the rowset; and a description of the levels associated with a rowset if it returns dimensional data.

6. A method as claimed in claim 3, wherein the dataset informational object further provides access to a column informational object that provides access to: the data type, length, scale and precision of the column; an indication if the column supports null values; the display label for the column; the sub-type of the column; and the ISO currency code if the column contains values of a single ISO currency.

7. A method as claimed in claim 3, wherein the dataset informational object further provides access to a level informational object that provides access to: the label associated with a level; and the order in which the levels are nested within a rowset.

8. A method as claimed in claim 2, where the partial dataset data retrieval object provides access to: an edge iterator object for each edge in the original report layout specification; and a cell iterator object for the cells of the result set, if applicable.

9. A method as claimed in claim 8, wherein the edge iterator provides access to: a virtual rowset containing a collection of rows from all rowsets contained within a single edge; the number of rows in the virtual rowset; a method by the edge iterator, for each row within the virtual rowset, provides access to: the unique identifier of the rowset to which the row belongs; the rows unique identifier within the context of the overall edge and the rowset to which it belongs; the detail row number; the edge coordinate associated with the row; the row ordinal, the unique identifier of the row across all rowsets within an edge; the ordinal of the row's ancestor; a collection of objects to obtain values for each column within a rowset; and a collection of methods to navigate the virtual rowset (first row, last row, next, previous, goto).

10. A method as claimed in claim 8, wherein the partial datasets are created relative to end of data, in which case row numbers end at -1 and decrement sequentially along each edge for which the starting point is specified as EOD.

11. A method as claimed in claim 8, wherein the cell rowset iterator provides access to: the edge coordinates that correspond to a row of data within the rowset; and the values of columns within the rowset.

12. A method as claimed in claim 8, wherein a copy of the current row of data is created from any of the rowsets contained within a partial dataset.

13. A method to create a partial dataset that contains values from outer/higher levels of grouping/nesting within the original report layout specification to provide complete context for values from a partial dataset created from an arbitrary position within an overall result set of either: a. None. b. Rowset context. c. Rowset context with headers and footers. d. Rowset context with headers and footers, as well as the 1st row of detail data; wherein for b, c, and d, the ability to request that values be returned in the cell rowset iterator for multi-edge queries.

14. A method as claimed in claim 13, wherein multi-dimensional properties are retrieved as column values in the same row as the member to which they belong.

15. A memory containing computer executable instructions that can be read and executed by a computer for caring out a method that for each report specified in an original report layout specification a master dataset is returned that provides access to a dataset informational object and a partial dataset data retrieval object.

16. A carrier carrying a propagated signal containing computer executable instructions that can be read and executed by a computer, the computer executable instructions being used to execute a method that for each report specified in an original report layout specification a master dataset is returned that provides access to a dataset informational object and a partial dataset data retrieval object.

Read more

Claim Tree

  • 1
    1, A method of providing metadata and data based, on an arbitrary request for information, relative to a original report layout specification, in such a manner that a software process renders the results of the request for information using only the original report layout specification and the results of the proposed method without any knowledge of the underlying data source or the request posed to retrieve data
  • 2
    2. A method that for each report specified in an original report layout specification a master dataset is returned that provides access to: a dataset informational object; and a partial dataset data retrieval object.
    • 3. A method as claimed in claim 2, wherein
      • the dataset informational object provides access to: the name of the report within the original report layout specification upon which the dataset informational object is based; the name of the query upon which the data is based. This information may be required by a rendering, or other, component when resolving master/detail report relationships; the number of edges in the result set; informational objects describing each edge of a result set, the order of those objects based on their ordinal value in the original report layout specification; and an optional rowset informational object describing the rowset containing
    • 8. A method as claimed in claim 2, where the partial dataset data retrieval object provides access to: an edge iterator object for each edge in the original report layout specification; and a cell iterator object for the cells of the result set, if applicable.
  • 13
    13. A method to create a partial dataset that contains values from outer/higher levels of grouping/nesting within the original report layout specification to provide complete context for values from a partial dataset created from an arbitrary position within an overall result set of either: a. None. b. Rowset context. c. Rowset context with headers and footers. d. Rowset context with headers and footers, as well as the 1st row of detail data; wherein
    • for b, c, and d, the ability to request that values be returned in the cell rowset iterator for multi-edge queries.
    • 14. A method as claimed in claim 13, wherein
      • multi-dimensional properties are retrieved as column values in the same row as the member to which they belong.
  • 15
    15. A memory containing
    • computer executable instructions that can be read and executed by a computer for caring out a method that for each report specified in an original report layout specification a master dataset is returned that provides access to a dataset informational object and a partial dataset data retrieval object.
  • 16
    16. A carrier carrying a propagated signal containing
    • computer executable instructions that can be read and executed by a computer, the computer executable instructions being used to execute a method that for each report specified in an original report layout specification a master dataset is returned that provides access to a dataset informational object and a partial dataset data retrieval object.
See all 5 independent claims

Description

CA 02551197 2006-06-23 S stem an ethod of Read to Re Bnsiness Intellf a R snlt Sets FIELD of TH~t ~NyENTIOrr [0001 ] The present invention relates to data access middleware and in particular to a system and method of producing busuness intelligence data seta that can be rendered easily within user interface application systems. B~A~KC~ROLTND (1F TH~? INYENTTON [0002] Many organizations use data stores for storing bu~aness data, such as financial data and operational data. In order to assist business users to examine their data, various data analyzing applications are proposed. Tlwse data analyzing applications provide various views or reports of data to users. Those data analyzing applications typically have query engines that access the data stores to obtain desired data. 'The accessed data stores can be either relational or multidimensional stores, which are based on fundamentally different data storage technologies and hence produce fundamentally different result set structures. [0003] Some data analyzing applications have Online Analytical Processing (OLAP) query engines to allow users to analyze multidimensional views of data. This type of OLAf is sometimes called Multidimensional OLAP (MOLAP). A MOLAP engine sumtnarlzes business data into multidimensional views in advance, and places the summarized data in a cube structure. When a user request is received, the MOLAP engine accesses the summarized data, and thus the M4LAp engine can provide a response to the query very fast: 'r'he user can rotate the cube structured data to see a desired view of the data using the MOLAP engine. [0004] There also exist Relational OLAP (ROLAP} query engines that extract da#a from traditional relational databases. ROLAP engines are able to create multidimensional views on the fly. In order to extract data, those R~LAP engines typically use complex Structured Query Language (SQL) statements against relational tables in the relational databases. ltQ~.AP engines tend to be used on data that has a large numbex of attributes, where the data cannot be easily placed into a cube structure. ROLAP engines support -l~ CA 02551197 2006-06-23 multid~lm~sional queries issu«1 against relational databases. Some ROLA~' engines translate OLAP queries into SQf. queries, and other ROLAP query engines implement the access to relational databases using infernal carnmunication between components responsible for OLAP and relational operations. ~'LJMMARY OF THE INVLNTION [0005] For a BI application that is required to render various types of reports (lists, grouped lists, cross tabs, charts, mapsr repeaters, and a combination of these), having to deal with raw data means an exponential increase in its complexity. Presenting such an application with a system that turns raw data into highly formatted data gives the BI application the ability to render all types of reports in a simple and consistent mariner, The system provides an abstraction and a data model that is independent of the raw underlying data. [0006] In accordance with an embodiment of the present invention, there is provided a method of providing metadata and data based an an arbitrary request for information, relative to a original report layout specification, in such a manner that a software process can render the results of the request for information using only the original report layout specification and the results of the proposed method without any knowledge of the underlying data source or the request posed to retrieve data. [0007] In a~ccordanee with her embodiment of the present invention, there is provided a method that for each report specified in an original report layout specification a master dataset is returned that provides access to a dataset fnformatioaal object and a partial dataset data retrieval object. [0~0$] In accordance with another embodiment of the present invention, there is provided a method of creating a partial dataset that contains values from outerlhigher levels of groupinglnesting within the original report layout specification to provide complete content for values from a partial dataset created from an arbitrary position within an overall result set of either a. None, b, Rowset context, c. Rowset context with headers arid footers, or d. Rowset coatext with headers arid footers, as well as the 1 '~ row of detail -2-

CA 02551197 2006-06-23 data, wherein far b, c, and d, the ability to request that vetoes be returned in the cell rowset iterator for xnutti-edge queries. [0009) In. accordance with another embodiment of the present invention, there ie provided a rn~errrory containing computer executable instructions that can be read and executed by a computor for caring out a method that far each report speoi~ed in au original repark layout specification a master dataset is returned that provides access to a dataset informational object and apartial dataset data retrieval object.. [04x0] In accordance with another embodiment ofthe present intention, there is provided a carrier carrying a propagated signal ooa~taining computer executable instructions that can be react and executed by a computer, the coanputer executable instructions being used to execute a method that for each report specified in an original report layout specification a master dataset is returned that provides access to a dataset informational object and a partial dataset data retrieval object. BRIEF I)~~G'RIPTION dF'I'~ DICAWI'rTC3S [0011 ) These and other features of the invention will become nnore apparent from the following description in which referee is made to the appended drawings wherein: Figure 1 shows in a block diagram an example of a business intelligence system, in accordance with an embodiment of the present invention; Figure 2 illustrates an example of a detail list report; Figure 3 illustrates an example of a grouped list report; Figure 4 illustrates an example of a grouped list report with footer values; Figure 5 illustrates an example of a cross tab report; Figure 6 illustrates an example of a masterldetail,report; Figure 7 illustrates an example of a chart report; Figure S shows iu azt object diagram an example ofa master dataset and partial data set objects, in accordance with an embodiment ofthe presetrt invention; Figure 9 shows in an object diagram an example of a master dataset abject snd its child objects, in accorda~ace with an embodiment of the present invention; -3-

CA 02551197 2006-06-23 Figure 10 shows an example of the relationship between display items in a list report and cozxesponding RSAfZ in~vxxxrational objects; >i figure 11 shows an example of the relationship between display items in a cross tab report and corresponding RSAPI informational objects; Figure 12 shows in an object dxagraux an example of a partial dataset object and its child objects, in accordance with an embodiment of the present invenntion; JJBTAILED DESCRIPTION OF THE IN'~TION X0012] The present inven'on accepts both a query and business intelligence original report layout specification and returns the results of the query via a programming iztterfaee that presents the data relative to the original report layout specification. In this manner, a rendering corn~pvnent'16 is able to render.the results of the data by relating the original report layout specification elements with the objects returned by the programming interface. A query can be posed in an arbitrary query language as lonS as the results of the query are associated with elements in the original report layout specification. As such, the programming interface is independent of both the query language, such as SQL or MDX, and the underlying data source technology and as result, a rendering component 106 can be built that is independent of these concerns as well. The relationship between a data analyzing system 102, a data processing system 104 and a rendering component 16 is illustrated in Figure 1. [0013 ] Figure 1 shows a system 140 that has a Data Analyzing component (or sub- system) 102, a Rendering cvxnponent 106, and a Data Processing component 104. The Data Analysing component 102 provides both a query and a layout specification to the beta Processing component 104. The Data Analyzing component 102 also provides tlxe same layout specification to the Rendering component 106. The Data Processing component 104 then provides the results of the query it received from the Data Analyzing component 102 via a programming interface that presents the data relative to the layout specification. The Rendering component 106 renders the results of the data by relating it to the layout specification that it received from the Data Analyzing system 102. Original Report Layout Specification

CA 02551197 2006-06-23 [0014] An original repoxt layout speeif nation is capable of containing one or mare report apecifioatians where eaoh report xnay be one of the following standard Hl xepart types; ~ Detail list report, A detailed list report is tabular report where each row contains detailed fact values that correspond to the combination of non-~aot columns in each row. An example of a detail list report 110 is shown in Figure 2. ~ grouped list report. A grouped summary report is a tabular report that consists of one or more grouping columns and one or more fact columns. Fact values are aggregated according to the different cotabinationa of the grouping coluxxun. values. The rows are not homogeneous, as the fact values ~do not necessarily represent the samo level of siururtarization. Figures 3 and 4 shaw.an example of a grouped list report 120, and au example of a grouped list report with footer values 130, respectively. ~ C3rouaed detail list report. A grouped detail report contains both detail and summary fact values. In essence, it can be thought of as a combination of the izrst tvva~ reports. za ~ Crass tab report. A crass tab report consists of a collection of members along a raw and columns axis; members along each edge ma~~ be from one or mare dimensions and may exhibit parent/child relationships. The cells of a cross tab contain data values corresponding to the intezsxtion of members from each axis of the report. Figure 5 shows an example of a cross tab report 140. ~ Master/detail re~art. A masterldetail report consists of a master report in which the rows or one or mere raw~ets within the report have zexo are associated with other reports containing parallel detail information. Figure 6 shows an example of a master/detail roport -5-

CA 02551197 2006-06-23 150. A ck~art can be thought of as a graphical representation of any one of the above report types, or a combination thereof. Figure 7 shows as example of a chart report 160. [0015] The layout of the above BY reports can be described using the following BI layout elements: ~ Data item reference. A data item is a construct from a query specification that returns zero ar more values iidm the underlying data source. Data item references within the QRD provide the links back to the original data query and as such, the QRD is independent of the query and the language in which the query is posed . ~ Value set. A value set can define: o A collection of detail data item references. o A single key data item reference. . o A combination of the above two constructs, in v~rhich case the detail data item references are grouped by the key dat$ item. Mufti-bimsnsional property reference. It is possible for the values of a data item reference to represent mufti- dimensional members, typically as member unique names. In such cases, applications usually require the values of mufti-dimensional properties of those members. Within a value set it is possible to specify which properties are required far each member returned in the result set. These properties include such things as the member caption, parent, level, etc. -6-

CA 02551197 2006-06-23 ~ Headerlfooter. A value set may hate ag80C1ated with it a header ar footer data item reference, yr both. Either construct deices a data item whose values are associated with the entire group of value for value set~ t~. A group defines an arrangementlnesting of values sets andlor other groups. 'This flexible definition of a group allaws for the specification of rather arbitrary, but meaningful, report layouts. lU ~ Eke. An edgy is a collection of zero or more groups. A layout with a single edge is typioaily presented as a list report. A layout with 2 or 3 edges is typically presented as a cross tab (rows, columns, dicer). A report with more than ~ edges 15 may be presented as a mufti page report or some sort of chart. [0016] The Result Set Application Pmgfammi~g Interface (RSAPn returns data to client application via a collection of interface classes relative to the original report layout specification, not to the query used to obtain data from the underlying data source, 2d allowing a rendering coaxponent to match data values returned from the RSAPI wvith their layout apeeiflcation for rendering purposes. As a consequence, a rendering component ' can be implemented which is independent of the data storage technology, tlxe query language, and the quay itself. RBSLILT SET RBTR~VAL OHJHCT MODEL [0017) Upon execution of a query, an application using the RSAPI obtains a pointer to an IRSMasterDataaet object 170, an example of which is shown in Figure 8. A master dataset provides access to; ~ A method returning metadata describit~ how data being returned by the RSAPI is organized and how it relates to the original report layout specification. ~ A method that returns data for a specified portion of the overall result set of data.

CA 02551197 2006-06-23 ~ A. method that returns a vector of other master datasets that represent parallel detail reports in the case of a master detail report specification. (0018] A, method of the master dataset abject returns a pointer to an instance of the , IRSDatasetInfo class 180. An IRSDatasetInfo object is the root of a collection of classes tJ.~at convey all of the information required by a rendering component to render the data, including associations with the original report layout specification, an e~cample of which is shown in Figure 9. [0019 An IRSDatasatinfo object 180 xs the root of a result set's metadata and provides . access to: The name of the original report layout specif canon upon, which it is based. The name of the query upon which the data is based. ~ 'I'b,e nuxnber of edges in the result set. This is the same as the number of edges in the original report layout specification. ~ ~SEdgeInfo objects 182 describing each edge of the result set. The objects are ordered based on their ordinal value in the original report layout specil'xcation. An IRSRowsetInfo object 184 describing the cell rowset iterator, if one is present. [0420] An IRSEdgeIn~o object 1$2 is the root of a edge's metadata and provides access to: ~ The name of the edge, if speafied in the original report layout specification. ~ The number of coordinates on the edge. ~ The number of rowsets contained within the edge. ~5 ~ IRSRowset objects x 84 desesibing each rowset within the edge. [0021] An IRSRowsetlnfo object 1$4 describes a rowset and provides access to: ~ The name of the value set upon from the original report layout specification upon which the rowset is based. _g_

CA 02551197 2006-06-23 ~ The ID of the rowset. Each rowset is assigned an TD that is unique within the context of the edge in which it occurs. ~ The IRSRowset objects 184 of an edge are contained within a vector and the Ib of a rowset is its index within this vector. ~ The number of rows and columns in the rowset. ~ The ID of the rowsets, if present in tho original report layout specification, that represent the header or footer for the rowset, the parent or child rowsets of mwset (in the case of nesting of value gets along an edge) or the rowset that follows the current rowset along the edge. ~ A vector of IRSCaIurnnlnfo objects 186 describing each of the columns within the rowset. ~ A vector of IRSLevelInfo objects 188 describing the levels associated with a rowsct in the case that rnulti-dimensional members are present in the result data. ~ An indication if the rorwset represents a collection of measures. [0022] An IRSCoIumnlnfo object 186 returns information regarding the values returned far a column (data item): ~ Data type, length, scale, precision and whether null values are supported. ~ Name o~the data item from the original report layout specifcatian on Which the column is based. ~ Display label. w Sub-type, in the case of columns with data types of MIME or URL. ISO Currency code, if the coluann values represent those of a single ISO currency. [0023) Each ~tSRowsetInfo object 184 optionally contains a vector of IRSLewelInfo objects 18$. Each IRSLeveIInfo object 188 returns the label assigned to a level with the original report layout specification, if such a label was present. The levels are described ire the order in which they appear in the rawest. Note that for multi- dimensional data, the level information catx assist an application in producing a richer presentation of the data but that it is not essential to the rendering of the data. Figure ~10 shows an example of the relationship between display items in a list report 192 and RSAPI informational objects, in accordstlce rovith an embodiment of the present invention. Figure 11 shoWS an example -g-

CA 02551197 2006-06-23 of the relatioasbjp between display items in a truss tab repoxt 194 and RSAFI infoxraational Objects. Examples of vout ~peci~cations and Co ondin~,Dataset farmational Objects (pp24] The fohowing is an example of a layout specification for a detaul list report 11p as shown in Figure 2: <quex~r~x~pultDefinition acme='~guexya..0~~ ref~uery="S~ueryl"~ <edges~ wedge name="columns"a aedge(~xoupaa cedgeGroup~ . a~valua8ets~ , ~valueH~t name='~list~~~ agroup~ody name=~grou~$odyW cdataIt~nR,e~ refDataltem=..year"/~ cdataltemRef refDataltem="Product line"/~ adataltemRef refDataltem='~k~eveaue"/a c/groupeody5 </~lueset~ c/'valueHets7 a /edge(~roup~ a5 c/edgeC~roup~> a/e~~ c/edgesa c /quex"YR.esul~.Defixlat ions (p025] 'The following i$ an example of the corresponding dataset information for the detail list report 110 as shown in Figure 2: adatasetlnfa Report x~a~te~.~~uery~.o~~ guery name-"~xery~.n wumbe~ ofr,edges="2 ~ a csd~eInfo ordinal="0" Bdge,~name--"columns" Number Of rowaets=~1"s <roavsetInfo Rowset name=~list" id="0~ headerlioweet:Id="-1" footerRowsetld="-1~ paI'~!s'GROal~a~zd= ~ _ y, n ChildROwAetId~" ~ 1 ~ nextRowsetIds"-1" numColumns="3" isMeaaure="0"~ 4S cadlrunnxn~o ixame=,ryear~~ labez="year" iraEroperty="Ou type="str~.ag" sulo~rpa~"" rlul lsOk=° true" - 10-

CA 02551197 2006-06-23 length="-l" preci8ioar"Ox scale="0" curreacyCade=~"/a caalumn=nta name="Product line" label="Product line" ~ isProperty="0" type=pstring" eubTyge="" nullesOk="true" length=~-1" preafaion="0" soale."0" currericyCade=""/a eaalumnznfo name--"Revenue" label="Revenue" isProperty="0" type~adouhle" aubType!"" nullaOk=~tWte" 7.ength="8" prCCision="2" sca~,e=np" currencyCvdea~"/a c/rov~ser~foa s/edgez~foa c/datasetznfoa [0026] The following is an example of a layout specification for a grouped list re~rort 120 Shawn in Figure 3:. aqueryResultDefiaitioa name--"~ueryl.0" ref~uery="~ueryl"a eedgess sedge name~"columas"5 cedgeGroups~ aedgeGroup> cvaluegetaa evalueSet name="Year" refDataltem="Year"/a a/value8etsa aedgec~x~aupsa eedgeGraupa evalue~3etsa cvalueeet same="Eraduct Line" refDataltem="aroduat line~'/a ~/valueBetsa c~dgeQroupsa <edgeGroupa avaluesetsa evalueset name="Revenue~'a cgroup8ody name="Revenue"a <dataItemRef refDataItem~"B.everrue"/a c/groupBodya a /rralue8eta c/valuel~etsa a /edgeC+roupa c/edgeGroupsa </edgeGroup~ a /edge(~roups a ' </edgeGroupa -11-

CA 02551197 2006-06-23 a /edgeC~roupga s/edge> ~/edgesa e/quexyReeultDefinitioria [0027] The following is an example oFthe corresponding dataset information for the grouped list report 120 shown in liigure 3: sdatasetInfo Report name="~ueryl.0'r ~ery_name="Quexyl" Nu~er~of~,edges=" 1"~ aedgeInfo ordinal="0'r Edge name="columns" er_of_rowrets="3"~ crowsetlnfo Rowset_name="rear" id="O~r he~d~~Rowsetld="-1," ~ootex'RvwBetld="-1," parentRCwsetld="-lrr ehildRawsetid="~." nextRowsetId="-1" numColumns="1" isMeasuxe="0"5 acolumnlrifo tlamr=="Year~ label="Year"

ieProperty="0~ type="string"

eub'i~rpe~"" ~ rtullaOk~"false"

length."-1" precision="0"

pCale=r' D" Clirr~LlCxCOde~" n /~

a/rowgetTnfoa srowsetInfo Rowewst_name="product line" id="1" headerRowsetId="-1'r footer~LowsetId~"- 1" parentRowgetzd="0" childRowsetId=r'2" riextlxowsetld~"-1" numColumns~"1" isMeasure="0"~ ~columnInfo nam~="Product line" label="Prdduat 7,ina" isProperty="0" type="string" subType="" nulleok="false" length="-1" precision-.."0'r scale-"0" GurrencyCode=n"/a e/rowsetInfo> 4$ ~rawsetInfo Rowset_name="Revenue" id="2" headerROwsetzd="-1" fovterRowsetzd="_y,. parentRowsetId~"1" childRowsetld~"-1" nextRowsetld="-1" numColumns="1" isMeasure="D"a acolumnInfo name="Revenue" label="Revenue" isProperty="D" type="double" subType="" nullsOk="true" -12-

CA 02551197 2006-06-23 leagth~"8" precision="~" scale="0" cu~e~nayCodes" "/> s/rowsetInfo~ e/edge=nfoa e/datasetTnfo> 00028] The following is an, example of a layout specification for a gr~.ped fist with footer repoxE x 30 shor~m in Figure 4: cc~ueryResultnefiuition name="Queryl.~" reff~uex~y."~ueryi"a sedgesy sedge name='rao7.umr~s"a <edgeGroups> <edgeGrcup> cvalue8etga <valtse~r=t a~tte--"Year" refDataIte~"Year"> egxoup~ootex name=~7rear group footer'r~ <dataltemRef refData2te~n="Revenue"/a c/gxoupgootexa a/valueSeta c/valuesets~ cedgeGroups~ - cedgeGroup~ avalueseta~ <valueGet game="Prpduet line" re~nataltem="Product lisle"a tgroupsaotex name="Product line group footer"~ <data=temR,ef refnataltem=,rgevez~ue'r/~ c /gx~oup8ooter~ s/valuesets e/va7,ue8ets> <edgeGroupga <edgec~rpup> . . cvalue8ets> cvalueset name="Report evmmary",, ~graupBody name=Rapart group bodx"> <dataTtemRef refDataItem="Revenue"/~ </groupBodya c/value8eta </valueSetsa ~/edgeGroup~ </edgeGroupe> s/edgec~roulaa c/edgeGroupea ~c/edgeGroup~ a/edgeGroups~ a/edge> .c/ed~geea e/queryl~esultDefinationa -13-

CA 02551197 2006-06-23 [0029] Tl~o following is an example of the coz~reaponding dataset information for the grouped list with foots report 130 shown iu~ Figure 4: edatagetInfo Report name="~uexy~..0" (query came="Queryl" Ier of edges="1"> ~edgelz~fo ordinal="D" name=''oolumrls" Numbex of rawsots="5"~ arawsetlr>.o name="Year" id='rp"headerRoweetld="-1"

fodterRowsetId=~fl pa~reatROweetxd="-1"

ch3ldROwsetId="~" xsextROwsetId~"-~."

ntunCdlumns=~1" isMr=agars."Dxa

ccolumalnfo name="Year" label="Rear"

isProperty=~'0" type="string"

eubl'ype="" nullsOk"false"

length="-1" , preaisio~n="D"

scale="0" currancyCode=""/~

a/rawsetzno>

~rowsetlnfo name="Year group toater" id="1"

headerRoweettd="-1 foaterRovrsetld="-in

pareatRowset=d="-7." childROwaetld=r'-1"

nextRov~setld="-1" numCol~rid="~."

isMeasure="0"y

Coolumn,InfQ name="Rerrenue" label="Revenue"

isPrapertys~D" type="double"

sub'fype.N~ nullsOk~"true"

lengthr"8" precisiaa="2"

scale="D" currencyCode=""/a

c/xowa~et~z~fo> -

crowsetlafo name="product line"id="2"

headerRoweetId~"~1" footerRowsetId="3"

pareatRowsetld="0" ahildROa~eetld="~"

riextRowaatIdn-1" x~runColumns="1"

leMee.eure="0 ~

cCdluri~1T31~6 name="product line" labeJ,='~8roduct line" isproperty="D" tyge="string" subType; ~ ~ nul l'sOk~ ~ fa~.se" l.engttl="-3." precision="Dn scale--"0" rrurrencyCado=""/a a/rawsetlnfo3 ~rowsetla~o na~me~"product line group footer" id-"3" - 14 ..

CA 02551197 2006-06-23 headerRowsetzd="-1" ~OOt~xRowsetTd="-1" parentRowsetzd="0" childRowsetTd="~1," $ . nextRowaetId="~1" IlulLlC0~~1n9="1" ~sMeasure="0"a aoolumzssnfo name="Revenue'r label--"Revenue"

isPx~operty="0" type="double"

subType="" nul~.sOk="t,ruep

~.en,gth="B" prec~.sion="2"

scale="4" currencyCode=""/>

c/x'aarsetlnft,a

rroweetlnfo nam~~"Repoxt curnmary" id="4"

headerRoweetIdg"-1" foOt~Y'RDw~etIdCn_~~r

parentRow~etxdt="2" ahildRowsetxd="-1"

. nextRowse'tId="~1" r~umColumns="1"

~, ~~9easure= " 0 " ~

<columnInfo ~aame="Revenue" label="R~vez~ue"

iaProperty="0" type="double"

subType=p" nullsok="true"

Zength="8" precision="2"

scale="0" currencyCode~""/>

e/r~dwgetlnfo>

</edgeInft~>

~/datasetinfo> - [0030] The following is are exampke of a Iayaut specificarion for a cross tab report 140 shown in Figure 5: <queryR~sultDefinitio~n name="Query~..o" ref~uery="Queryl"7 <edgesy wedge name="COlumn~srr~ tedgeC3xoupsa aedgeGroup> avalueSets> avalue~et name="Qxaduct ~,~,ne" refaat,a2tem="Product line"a <propertiee> <prope~rty name--~Member_caption"/a </pro~sertiee> </value8ets ~/valuesete> < / adgef~roup> </edget~roups> -15~

CA 02551197 2006-06-23 </edge> <edge name~"TOWS"> < edgeC~roupe > aedgeGroup> . <value~3eta~ <valueSet name="Year" refpataTtem="Year"> <prapexties> <property name="Member caption"/> e/properties~ 14 </valueset> e/value8eta> <edgeGroups> <edgeGroup> <valus8ets> <valueset name="quarter" refDataItem="~uaxter"> aproperties~ ~cproperty name="Membex_aaption"/> </properties> </valuesety < /w'alue set s a </edgeGroup> c /edge(~roup& ~ c/edgeGroup~ a / adgeC#raupa > </edga? <edge names"sliver"> <edgeGroupsa <edgeC3rOUp5 <value8etea 34 <va~.ueset name="Revenue" re~l7ataztem="Re~renuen> <proparties~ <property name="Member caption"/~ . </properties> </valueset> ~/valueSeta> </edgeGroup~ </edgearaupa> </edge> ~/edges> a/$ueryRest~ltbefix~itiori> [0031] The following is an example of the corresponding dataset information for czoss tab report 140 shown in Figure 5: 4~ sdatasetlz~fo ~teport~name="~e~'y1.0° Query name="Queryl° I~ltxmber~of~adges="3 "> cedgeInfo ordinal="8'r name=neo~umns~~ numR.dwsetra="1"> <rowsetInfo name="Product line" i.d="~" laeaderRowsetId="~2" foctexRQwsetzd~"-1" parent~RoW'getTd--"~ln childRowsetId-°-1" -16-

CA 02551197 2006-06-23 naxtROweetIdg"-z" numColunaae="2" isMeasure="Orr> ~aoiumnrnfo name="product line m~nberCaptioa" $ , label=~product line" ieproperty="1" types"etrixL~n ~~rrypo,a"" aullsOk="false" length="-1" precisiaaw"0" scale="o" currencxCode="*/> , is <columnlnfo same="Product line" label="Product line" isgroperty="0'' type="string" e~ub'fype="" aullsOkc"false" length="-1" preaisioa="orr 15 .E3CalOa n 0 n curreslCyCOd~=" "/? ~c/roweetlafo> s/edgelnfoa zo ~edgeInfo ordinal="i" x~.ame="rows" numRowsets..x2"5 srvwsetln~o ~~aame="12" id~"ou headerROrva~etrd="-i" footerRowsetld="-1" 25 pp,rentRowsetId="-1" Childl~,owmetId~"7." nextRo~aet=d="-i" x~umColumrrs="2" isMeasurem"0"> ~~columnInfo name="Year/ memberCaption" ~.abe3.="Rear" 3Q isProperty~"i" type~r"string" E,lllb'~.'yp~= a a aullsCk="false" leagth~u_1" pxeo~,~a.on="0 n scale="Ou 35 currericyGode=""/> sGOlumrarrito name-"Year" label="Year" leProperty="o" type="string" suh~.'ype."" nulleOk="falseB 40 ler~gtas="-a w precis ion="O rr scale="o" curreacyCode=""/a c/rowse~Info> 45 arowsetlnfo same="Quarter" ld="i" headerltowaetId=n~1" faoterRowsetxds"_1" parentRowsetxd="0" ahildRowsetId=n_ln nextRowsetId="-i" aumCo7,umne="2" idM~asurrr=~' 0"y , , acolumnInfo name="Quarter/ rctemberCaption" label="Quarter" isPrvperty="in type="stri~riga _17_

CA 02551197 2006-06-23 eubType="" ' nu~l8ok="false" length="-1,~ preaigian="0n scale="0" auri'~xICyCOCI6~" "/y saolumnTrifa aa~tea,auarter" label.."t~uarter'r ieproperty="0~ type="string" ~uY~Type="" nullsOk="false" length="_1,r preaisian="O" saa7,e="0~ auxrenayCode=rr"/y e/rawsetlnfoa ~/edgelnfaa aedgeIa~o ordinal. ~~ 2 ~, name="slieer" numRowerrta. ~ 1 ~, 5 aroweetInfo n:tme~"21" , id;,rOn her3derRowaetId="-1" footerRowgetld-"~1" parentRawt3efi~zd.rr-i~ ahildRowsetld~"-Z" nextRowsetld=~_i" nt~mColumrra=n~" ifSldeas~ux'e= ~ 1"~ aoolu~za~~a a~ame=~~teve~,ue/ memberCaptiaa" label="Revenue" '

fsFraparty=~rl,r

type="etriag"

s~~e="" ,

nullsok~"false"

length= ~, -1"

p~Ci~~.O~= ~ Q n

scale="O" .

curreacyCode=""/>

acolumnlnfa name~~rFtevenue"label="Revenue"

is~r~erty="0"type="dauble~'

subTypa~"" nullsOk="falsep

length="8" preaf~sion="Zrr

scale="0" curreacyCode=~"/y

c/rowsetInfa~ e/edgelr~~oy cae11l2owsetInfo name--~~ numRows="per numColumne="~."y <columnInfa name="value" label="value" ~,sP~perty=~'0" type='double" 9u1?TnJE6 n " nl3,il~pk. "trLle" length=~~ s ~~ precision=~ o ~' scale--"Q,~ curreacxCade='~"/a -18~

CA 02551197 2006-06-23 e/aellRawsetln~oa c/data~et~nfoa Parti~t Dataset [0032] All of the above objects together provide the information necessary for rendering component to relate the various RSAPI objects with the original report layout specifioatio~a, in addition to providing column (data item) information such as data type, scale, etc. An IRSPartiaHDataset object, on the other hand, provides a rendering component with access to the actual data values associated with each of the individual rowsets. 'fhe IRSPartialDataset class is named as such because the intent is that a rendering component retrieves a partial set of data from the overall dataset (set of data) returned by a query to match what can be displayed in a display device. It is poss~le to retrieve the entire data set in a single partial dataset, such as when reztdering a PDF report. Figure 12 shows an ei~ample ofthe data retrieval objects of the RSAPI, in accordance with an embodiment of the present inventia~n. [0033] A partial dataset 202 is created from a master dataset by specifying a ratlge of coordinates for each edge of the result set. A partial dataset 202 then ,provides access to edge iterators 204 to access the data slang each edge of the result set and a.cell iterator 2.~6 to access cell values in the case of a multi-edge (cross tab) report. A parties dataset 202 may also be empty, a condition which may occur when a query returns no data and is obtained via a~n IsFrnnpty method oaf an IRSParkialDataset object. Bdee It ators 204 [0034] tom a partial dataset it is possible to caeate a~ne or more ~I.tSEdgeIterator objects 204 per edge, as well as one or more IIxSCallItexator objects 206 for the values of a mufti-edge report. _ 19_

CA 02551197 2006-06-23 [0035] An IRSEdgeIterator object 204 can be used to navigate all of the mws of all of the rawsets of an edge present within the scope of the partial dataset from which it is created. All of the rows of data are coz~,tained within a single, virtual rowset. Each row is associated with a particular rowaet; its ancestor raw within the result net is also identified. A rendering component uses the ancestor infonx~ation to determine pareat/child relationships within the data. The parent row of a particular mw may be within any rowset in the same edge that in the IRSRowsethayout information 190 is sibling or parent of the current rowset. [0036] The following constructs are used to identify the position of a row within a virtual rowset: 1. Rowset 1D. The identifier of the logical rowset do which a row of data belongs, representing the index in the edge's vector of IRSRowsetInfa objects 1$4. . 2. Row Number. The row's unique identifier in the context of floe entire edge, not just the partial dataset with which the current it~ratox is associated. Row numbers are required to bo unique within the scope of all rows for the rowset for the entire edge. leach row in an edge rowset is uniquely identified by its (rowset id, row #) tuple. 3. Detail Raw Number. A unique sequential value used to identify rows of detail data along au edge, They start at 1 and inc~xnent by 1. For a partial dataset created relative to ertd of data, detail row numbers start at--1 at EOD and decrement by 1 towards the start of the rowset. A detail row number of 0 indicates a non-detail row of data. A row of data from a y (headerlfnot~) mwset cannot represeaat detail data. 4. Coordinate. A unique value along as edge that is used to correlate a row along an edge with a raw of data in the cell rowset. A coordinate from each edge is required to uniquely identify a single raw in the cell rowset. Cell coordinates can be any value, but are uniciue along au edge, A cell rowset is required to return data in mw-major order. A coordinate of-1 indicates that a row of data has no corresponding row in the cell rowset. -20-

CA 02551197 2006-06-23 5. Row Grdinal. A row's unique identifier within an entire edge rowset. The ordinal is simply the tuple comprised of a rowset ID and row number. The RSOrdinal class encapsulates the two pieces of information. Edge Rowset Iteration ~0037~ A client application uses the row ordinal and ancestor id to guide its navigation of an edge's virtual rowset. The application has available to it a small set of navigational methods: , ~ ToFirstRow ~ ToL,astRow Next ~ 1'rrevious . The above 4 methods provide navigation relative to the virtual partial rowset independent of the rowset with which a row of data is associated. ~ Goto Allows navigation relative to a row ordinal (rowset XD and mw number). [0038] Au, edge iterator 204 provides access to the following positional information: ~ Numbex of rows in the virtual rowset. Current x~ow number. Rowset ID of the current row. ~ Detail row number of the current row. ordinal of the current row. . ~ ordinal of the rorw's ancestor. Edge coordinates ofthe current row. [0039] The above navigational and position~l methods are conabir~ed by a rendering campoz~eut in order to navigate the values along an edge in order to follow nesting relationships and to associate a row of data back to its rowaet information and as a -21 -

CA 02551197 2006-06-23 consequence, its corresponding element in the original report layout specification. A rendering component can also use ancestry and rowset information to recognize both; ragged and unbalanced paths within a result set. Positioniry vcrithin an Edge Rowset. PDS Created Relative to EOD [OOA~O] 'When areati~a.g a partial dataset from a master dataset, the starting detail row number and number of detail rows far each edge is specified. A negative number of detail row members is interpreted to indicate that the first value (row number) is relative to the end of the corresponding edge. For example, the pair of values (100, - 20) indicates a partial dataset containing 20 details rows ending at the 100s'row from the end of data. [0041] The IRSEdgelterator: GetRowNrrmber method. for the edge of a pa~ttal dataset created relative to end of data returns negative row munbers, the last of which is -1. Row numbers are decremented by 1 towards the beginning of the partial dataset. Using the previously stated example, the edge rowset would begin at -20 and end at -l . Note that the non-detail raw numbers are also affected by creating a partial dataset relative to ELI). That is, the last now in a rowset is numbered -1 and previous row numbers are decremented by 1. Cell Rowset Iteration [0042] In the case of a multi-edge (typically cross tab) report, a cell rowset iterator is available for a partial dataset. The cells of the N-dimensional space are presented in a single rowset of data in row-major order. The same next/previous/firstJlast methods are available as fox the edge iterator class. The Goto mothod accepts an array of edge z5 coordinates, one for each edge, to position on the row that represents the intoa of the specified edge coordinates. Fmm a row within the cell rowset it is possible to obtain ate array of corresponding edge coordinates. With these two mechanisms, it is possible for a rendering oomponent to associated edge rows with cell values with either the edges or the cells ss the staxbing point. -22-

CA 02551197 2006-06-23 Retriey~'n~a Column Data. d Column Btatea [0043] Column values are retrieved fram an iterator object either by' retrieving them one by one or ~by retrieving all column values at once. Each column value is returned by an IRSCoIumnValue object that returns methods to retrieve the following information regarding a column's value: ~ State. ~ Data type, precision, sad scale. ~ Locale. ~ Currency code. ~ Format. ~ Unit of measure. ~ Value. [0044] In the case ofmetadata rich data sources (e.g., SLAP data sources), jnfarmatlon such as locale, currency code, format and unit of measure may be available. This information is supplied to the rendering component to allow this information to be applied when formatting the data. Cop i~na a Row of Data [0045] The column data retrieved firm the RSAPI remains valid while the iterator remains on the row from which the data is retrieved. Once the iterator is re- positioned, the data is no longer guaranteed to remain valid For this reason, it is possible firm both ~5 xRSCellTterator 206 and lRBEdgeIterator 204 objects to obtain a copy of a row of data that remains valid for its lifetime. This facility is uae~ul far applications which need to navigate from one row o~ data to another in an edge or cell rowset and render a group of values at one time. Partial ~a et Context [0046] When navigating through a report, a user may move in a variety of different manners -- up, down, left, right, top, bottom, next page, etc. The rendering component - 23 -

CA 02551197 2006-06-23 obtains the set of data that corresponds the user's request and then render the results to the output device. In marry reports, especially grouped list reports or nested cross tabs (eithar multiple levels of a single dimension andlor different dimensions), it is desirable to provide the outerlhigher levels of nesting in the output to provide the necessary context to the end user in the new page of data. [0047] p'or eXample, if a user was looking at a report that slowed on one edge the nesting of USA/Cali~oxnia/San Francisco, if they paged down to see Los Angeles, they would expoet to see the nesting USA/California/Jaos Angeles. However, if the row for Los 1 d Angeles was the first row in the new partial dataset, that context would not be part of the partial dataset. To provide the necessary context would require the rendering component to maintain the previous result set and match the two partial datasets. However, this approach would not vaork if a user paged to the bottom, or to an arbitrary location within a result set. In these cases, the rendering component would have last tho outorlhigher 15 level context for ioworlinner level values. [0048] The RSAPI previdea a facility for obtaining tb-a outerlhigher level context values when creating a partial dataset. In addition, it is possible to request that that the partial dataset, in case of a multi~edge report, that the partial dataset contain values in the cell 20 iterator that are associated with the context values an the edges. [0049 Below are described the various types of context which can be included as part of the data within a partial dataset. In each case, it is poseible to request that in the case of a znulti-edge report (typically a cross tab) that the corresponding values be returned as rows 25 in the partial dataset's cell iterator. Context xype Description.

Node. ~- Do nOt provide any context. - ..

Rowset context. For the first detail row of each edge iterator in the partial

dataset, amend the beginning of the edge iterator with a

single row from each non-detail, non-army rvwset in

which the detail raw is nested. Rows of context data are

distinguished a~ non-detail rows that occur in the partial

data set prior to the first detail row.

~ Rowset context Amend the rowset context with alI with rows of all related

-24-

CA 02551197 2006-06-23 headereJfooters.header and footer rowsets.

Rowset context 'The same as "Rowset context with headerslfooters," with except

headerslfooters that the first detail rows for the and 1~ nested rawest is also

detail row, included.

[0050] The navigational methods of the edge itezator listed in the previous section ('foFirstRow, TolrastRow, Next, Previous, and C3oto) return a status of "context" when they position an ibcrator on a context row, allowing an application to determine immediately what type of row they have positioned on. Multi-Dimensional Properties [0051 ] If multidimensional properties are requested as part of a value set in the original report layout apeeification, the property values appear in additional columns within the rowset, one column per property. MastaJDetail Navisatian [0osz] Masterldetail relationships are not contained within the original report layout speviiioation, but are described within the queries used to populate the original report layout specifications. Whey the original report layout specification actually irwolves multiple report layouts that are related by query-speoi~ed links, the mot master dataset provides access to a vector of detail master datasets. When positioned on a row of the master result set, a rendering component can execute one of the detail queries using values from the master result set. The information regarding which columns provide the parameter values for the execution of the detail query is not provided as part of the RSA>?'Z and must be provided to the rendering component via other means. [0053] It is possible for masterldetail relatlor~ships to be nested ~ any arbitrary depth. Examples of Partial batasets [0054] The following is an example ofthe corresponding data contained within a single partial datasot for the detail list report 11 Q in Figure 2; ~25-

CA 02551197 2006-06-23 epartia~.bataset eersioa="3.0"a cadge ordinalC"D"y crow detailRow="1" rowsatId='~D" rawsctlxow='~1" arrce~stoxRowe~tsdw"_1" anaestorROwpetRow="-1"y GCOlumn n="Year"~Val,l~C="2004" gtat~="OK'~ type="~tring"/> Gcolumn name="Product 7.i.r~e" value="camping Equipment" gtate="OKn type=rrstringn/> ccolumn name="Revenue" value="20471328.88" stag="OK" type="double" currency="USD"/a c/row> ~rvw detailR.aw="2" roweetld="0" roweetRow="2" ancestorRowsetId="-1" anaestorRoweetRow--"~1"a ccalumn name="Rear" value="2004" state="OK" type=natrixig"/y Ecolumn names"Product lice" value="Golf Equipment" state--"OK" type="string"/~ GaOlumri xlame--"Revenue" vslua~"5597980.86" Atate="OK" type= ~ c7.ouble" currency="USD"/5 c/row> crow detailRow~"3" rowsetld="0" rowgetRow="3" anceetorRowsetld="-1" axlcestorROwsatRaw="-'~"y ccolumn name="Year" value="2004" state="OK" type="string"/s Gaolumzs name="Product line" value "Mountaineering Equipment" ata.te="ax" type="string"/> ccolumu game="Revenue" value="0" state="OK" type-"integer~' currency="V~D"/y c / rc~w> <raw detailRow="4" rowaetrd~'r0" sowSetRaw="4" anceatarRowsetld="~1" ancestorRowsetRow="-1"y ceolumn name="Year" va~.ue="2004', statem"OK" type="string"/a seolumn name"Product line'' value="Outdoor protection" State--"OK" 4~ type="~gtrillg.r /a ccolumn name="Revenue" value="1536456.24" state--"bK" t~rpe;"double" currency="USD"/a ~/row~ Grow detailRow="5" rowsetzd="D" rawsetRow="5" ax~cestorROwcetld= ~' - ~ ~' ancestarRawsetRow="-1"> ~cohunn name="Year" value="2004" state="OK" type="String"/~ aeolumn name="product linen value="PerSOnal ACOe8e0rie8" state="QK" type="string"/y ccolurnrl name="Revenue" value."7144797.52" state='~OK" type= "dou'ble" aurrenay~"USD"/> ~/raw> - 26

CA 02551197 2006-06-23 crow detailRow="6" rowsetld="0~ rowsetRow="6" aaaestarROwsetId="-1" anGestorRowsetRow="-1"s acalumn name="Year" value=~005" state="oK" type="string"/s <aolumn name="product line" value="Camping gqu~,rit" state="OK" type="string"/S acolumn name="Revenue" value="31373606.46" estate="O~t° . type=wdeuble" currexicy="U9D"/a a/rowa Crow detailRoar="7" rowsetld="0" aetRow="7" ancegtorRowsatxd="-l~r anCeltOxROwBltRaw="-1"y acolumn name="Year" value="2005'r state="oK" type~'rgtriug"/~ ~aolumn acme="Product l~.ne" value="Gulf Equipment* stabs="OK" type="8tring"/5 sCOltm~ name="Revenue" value="9598268.88" lt~,t~a"OK" type="double's currency="usD"/~ s/rowa crow detailRow="8~ rvwsetxd="o" roweetRow~"8" ancestorRowsetIdC"-~." anceatorRowllltROw--"-1"~ eaolumn name="Year" value="2005" state="OR" type="string"/a scalumn s~arne="product line" value="Mountai.neexi~sq Equipment t' state="OFC" typemrstringn/~ eCOl~umn. name="Revenue" value="9642674.54" state="OK" type="double" currency="USD°/> ~/rowy <row detail~xow="9" xawaetxd="0" rowsetRow="9'~ ancestorRowsetId="~1" anaestorROwsetROwr,"_1"~ . acolumn name="Year" Vale!="2005" gt8tl~"pK" type="string"/a ecolumn name-"prodl.~,ct line" value="Outdoax protection" state="aK" type="etrixig" /a eaolumn name="~teveriue" value="988230.64" state="OK" type= "dau~ale" currency=°U8D"/~ ' ~/rown grow detailRow="l0" rawset'id="o" rowsetRvw="io" . anceatorRowsetId="-1" xncestarRaweeatRaw="-1"> <COlumn name="Year" value=°2005° state="OTC" types"string'r/~ ceolumn name="product line" value="Personal ~aae~taorile" 8tlte=lrpg" typ!=y~'~'~g'y~ <calumn name="Revenue" value="10955708.04" State=°OIC" SO type="double" aux'rency~ "T5'8~" / a c/row~ crow ddtailRaw=k~.T" ~.~owsetId="0" rowsetRow--"11" anCeBtorRowsetld="-1" a~ceBtorROwsatRow="-1"a column name="Year" vaJ.ue="2006" ststa~"pK" type="string~/~ -27-

CA 02551197 2006-06-23 acolumn name"Produot line" vali>.e=~Csrnping Equipment" state=~OK" . type="string"/a eoolumn name="Revenue" value="37869055.58" state="OK" type="e3e5uble" currency--"U8D" /> s/rows crow detailRow~"12'~ rawsetzd="0" xowsetROw="12" ancestorRowaetId~"-1" ancestorRowsetRow="-1"a scolumn, reamer="Year" value"2008" state="OK" type="string"/> acolurnn name="Product line" values=,rc~lt Equipment'r state="OK" typC="~,t~~.x~,g.r/a acolumn name="Revenue" value="10709215.84" state="OK" t~e~,rdOUble" ouxx,ancy="USD"/> s/row> erow~ detailRe3ta="13" roWSetId="0" rawsetRoW~"13,r arlC~~tbrROwsetTd=~-1" asl,C~storR,bw~~tRbwl="-1~> ~colurna name="Year" value="2006" states="OK" type~"~striag"/> column name="Product lina~ value="I~ouutaineerisig Ec~u,~.pment" ~ . state--"OK" type__rrgtririg"/a acolumn name--,rRe~rw~ril~,~~ value=~a.a.~48676.06" Ota,te="OK" type="double" currency="U8D"/> ~/rowa grow detailROwm"14" rowsetId="0" rr»rsetROw="1~4" anaeetorRoweetld="-1" ancestoxRowsetRow="-1"> coolus:>n name="Ye:ar" value="2006" state="OK" typ~="string"/> acolumn name="Qroduct line" value="outdoor Protection" state="OK" ~ type="string"/> ccdluct,u name="Revonue" value="646428.04" state="OK" type="douhle~ currency---"U8D"/a s/row> cx'pv~ detailRow="15" rowsetId="0" rowsetROw="15'r ancestorRowsetId~"-1" anaestox~towsetRow="-1"~ ~COlunm same="Year" 'V'Slrlws~~a006" state="OK" type="string"/a dcolumn namo="Product line~ value="Personal Accessories" State="OK" type~uetr'i>Zg"/~ aCOlumn name=~Revenue" value="13793960.3" state="OK" type"double" currency "USD" /a s/row> c / ee3gea > a/partialDataset> [0055] The following is an example of tlxe corrosponding data contained within a single partial dataset for the grouped list report 120 in Figure 3: apartfalDataset vesrsiors,="3.0"> wedge ordinal--"0"a . ~5 .

CA 02551197 2006-06-23 crow detailRow="0" rowsetxd="0" rowsetRow="1" anceetorRow~setzd="-1." anpeatorROwAetROW="-1"~ caolumn name="Year" value="x004" state="OK" type="string"/> t/raw~ crow detailROw="0" rowsetZd="~." rowsetRow="1," anoe~9torR.owsetld-"0" ' aneegtorRowsetRaw="~."y ccolumn name="Product lines" value="Camping 8qua.nt" 1~ state="OK" type="s t rixlg " / y , ~/xoW~ craw detailROW~"1" rOWSetId="2" row8et12ow="in anaestprRowsetrd="1" ~5 anceetorRowsetRoW="~."a CaOIUmTl rlartlA~ "ReVellu2" Yalue="Z 0~ 71~ 2 $ . 8 B" StatB~"OK" type="string" ourrency="vs~" /~ a/row> crow detailRow="0" mwsetId="1" xowsetRow="2" 20 ancestozRaweetTdT"0" aneestarRowsetRoW=~1"y caolumn name="Product line" value="c3alf Equipment" state="OK" type--"string"/> 25 e/rowy crow detailRow="2" rowsetld="2" rowsetRow="a" anaestorROwsetld="1n ancestorRow~setRow="2"y ccolumn name="Revenue" value="5597980.86" state="OK" 30 type--"string" currency="U~D" /> , a/aolumn> a/row> crow detailRow="0" roWSetZd="7." rowsetRow="3" 35 aneestarRawsetld="0" aaaestorRowsetRows"7."~ ccolumn name="Product line" value="Mountaineering $quipment" ,state--"OK" type="strixig"/> 40 t/row> erpw dAtailRpW="~" r4w8e~ICZ="2" xOwAOtRpw="3" - ancestorRowsetld="1" ancestorRowsetROw="3"5 ccolumn name--"Revenue" value--"0" state="oK" type"integer" 45 currency="L~BD" /> c/col> e/rowy <rOw detailRow="0" rOWBetId-"1" rOwBetROw="4" exlCeBtOx'l2,Owge'tx~=" 0" 50 anaestorRowsetRow="~."> ceolumn name="Product Line" value="outdoor protection" state--"OK" type="stringn/y e/xOwy -29-

CA 02551197 2006-06-23 C~'OW detailROw="4" rOW9etId=non rowsetROw="4'r ancestorROWeetTd="1" anCestorRowgetRow="4"~ , eco~,umr~ namr~="R~v~nu~" va~..u~="~.536~r36.2~" .gtat~="OK" types"string" currency="USD" /~ , c/columna s/rvw~ crow detailRow="0" rOwsetId="1" rowsetRow="5" ancegtorRowaetld~"0" ancestorRowsetRvw="1"a ccolumn name="Product line" value="Personal ~.acessaries" state="OkC" type="string"/~ c/rowa crow detailhow="s" roweetxd="~" rvwsetROw="s" anceatorItowsetTd="1" ~ , anGestvrROwsetRow~"b"~ aaoluma name="Revenue" value="7144797.5" state="pTC" type="string" currec,cy="USD" a / ao7.umn~ c/rowm crow detailRow="0" rowsetTd--.."o" rvwsetRow="a" ancestorROwsetId="~1" anceetorROwsetRVw="-1"~ ccolumn name="Y'ear" value="zD05" state="OK" type~"string"/~ c/row~ crow detailRnw="0" rvwst~tzd="1" rowsetRow="6" ancegtorRov~setxd='s 0 " aacestorRowsetRow--"2"> ccolumn name="prpduct line" value="Campiag Equipment" state="DIZ" type="string"/> </rowa crow detailRow="6" rowset=d="2" rowsetRow="6" ancestorRowa,rtld="i,r ancestorRoweetRaw="6"a ccOlumas name="Revenue" value="31373606.46" state--"aK" type="striag'r purrency="'GSD" /~ s/cvlurna~ c/row~ ' , crow detailRvw="D" rOwsetId="1" rowsetRow~,r7r' anaestvx~towsetId$" 0" ancestorRowsetltvw="2"5 c~column r~arne="~rvduct line" value="Golf Rquipment" State="OR" type="string"/~ c/rowa crow detailROw="7" rvwsetzd="2" rowsatRow="7" ancestorROwsetzd="~." ance~tOxROw~BetROw--"7". ccvlu~ name="R~venue" value--"959B26B,BB" state="4K" type="string" curreney~"USD" /

CA 02551197 2006-06-23 4 / CO 11~1~1~ s/ZY7YJ7 Crow deCaflRow="0" rowsetId="1" rowsetRow="8n anCestorROwgetId="0" ~ncestorRowsetR~w="2"a coolumn x~ame="Product lis~e" value='rMountainee~ring 8qui~rit" state="pKn type="string~/7 c/row> Crow detailRaw="e" rowsetlds"2" xowsetROw="e" aa~cestorROwsetld= ~ ~." ancestorRowsetRdw="8"~ ' ccolumn name="Revenue" value="g64~674,54" state="OK'r type='~ gtrill~" ~5 currency=~~~n" c/columrl~ </roWa stow detailRQw="0" rowsetId="1~ rowsetRow=~9" ancestorRowsetId="0" ancestorRowsetRow="2"> <aolumn name="Product line" value~"Outdoox Protection" state'rpK" type="stringn/5 c / roars crow detailRow="g" roweetTd--"2" rowsetRow="9" sncestorROweetxd="1° ancestorROweetRaw~"g"a eaolumn name='rRevenue~ value="988230.64" gtste="OK" type="string~ , ourrenay="USD" e/column~ K/row~ crow detailROw=~0" xowsetld$~1" rowsetROw="10~ ancestorRowsetId="O" anoeetorRowsetRow="2sy ccolumn name--"Product lixxe" value="EexBOr~al ~c~es8oza.es" Btste="OIC" type=~strf~t76gn/a a/rOwa crow detailRow="10" rowsetId="2" rowsetRow="10~ 44 anceatorRowsetxd="1" anceetorROwsetROw="1o"~ cao~.umn~name="Revenues values"10955708.04" state="pK~ . type="string" currency="p'SDn /~ e/colwmns ' a/row~ crow deta3lRaw~"0~ rowsetId="On rowsetRow="3" anaestorRowsetId="-1" SYlCeptOrROwpetROw="_iny cGOlun~ ~nazne="Yeax~ va~,ue="006~ state="OR" type~'rgtringn/~ ~ s/row~ crow detailRaw="0" rowsetId="1" rowsetRow~"11" aneestorRowsetId~"0" ancestorRowsetRow=n9n~ -31-

CA 02551197 2006-06-23 ecolumxi name="8roduct line" value="Camping Rquipment" states"oK" type="string"/~ . C/xCw9 crow detailRow="11" roweetId="2" xowsetRow="11" anceetorRvwaetTd="1" anceseorRowsetROw="11"~ <column s~sme="Revenue" value="37869055.58" state="C»C" type="string" currency."QAn" /> e/~olvm~na K/row5 crow detailRow="0" sowgetld="5." rowsetRaw="x9" ancestor~tvwsctTd~"0" azxcestorROwoetRow="3"3 acolumn same="Hroduct lire" value="c~ol~ Bquipzaeat" state="OK" type="gtririg'"/~ </rowa crow deta~.7.Row="i2" rowsetId="Z" lroweetRow~"~.Z" .aneeetorRowsetId="1" ancegtorRoweetRow="12"> . acolunuz name="Revenue" value="10709x15.84" state="OK" type=~'stx~~.~sg" currency."USD" /v c/aolumna c/row> stow detailRow="o" rowaetld="1" rowsetRow="13" ancestorRawsetzd="0" anCB~tOYRpwBetROw=~3'r~ <oalumn game="Product line" value="Mountai.aeering 8quipment" state="Ox" type="string"/> a/row5 Crow detailRow="13" roWSetId="a" 7CCwW:~Ltow="13" az~ceStorRowgetId="1" aaoestoxRowset~xow.'r 13 "~, ccolumn name="Revenue* value="1~,24859~.06" state="OIt" type-"string" currency="USD" /5 e/columr~ e/xow~ crow detailRow="~" rcwsetzd="~" rowsetROw="14" ancestorRowsetIdm"0" aaoestoxRowsetRow."3"s ecolumn name--"Produot line" value="Outdoor Protection" state="OK" type= "strixig"/ ~ a / rpsv~ crow detailRow="~.4" roweeeTd="2" rowsetRow="14" anOeStorRoweetId="1" d.I~C~iStprROWg~tROw="14"7 aaolwnn dame="Revenue" value;"6~5428.04u atate9NOK" type="string" aux~reno~r= "USD" s/columna a/rowm -32-

CA 02551197 2006-06-23 ~rpw detailROw="0" rowAetId="1" row~etRoW="15" ancestorRowsetIdr"0" ancestorROwsetRow="3"~ acolumn name="product line" value="Paxsos~al ~ccessori.es" S state="OK" types°stringn/~ ~/row> aroW detailRow="15" rowsetId="2" rowsetRow="~.5" ancestOrROwgetTd.-.."1" anOeatorRowsetRowT'r15"~ . ~colmnn name="Revenue" value='~13793964,3" etat,e="OK" type="string" currency="U8D" s/~01um11~ a/row~ ~/edge~ c/psrtialDataAet~ [005G] The following is an example of the coz7respoz~daz~g data contained within a single partial dataset for the grouped list with footers report 130 in Figc~re 4: .~partzaJ.Dataset version="3.0"~ sedge ordinal="0"~ crow deta~.l.Row="0" rowsetld='~0" rowsetRow="1" 2~ ar~,cestoxROwsetld="-1" anCE:~tOrROWAetROW="-1"a acolumn name--"Year" value="2004" state="OK" type="Airing"/a a/rowa eroW detailRaw="0" rowsetzd="2" rowsetRow="1" $nCe~tOr~iOwi'g e't Id=" 0 " anaestorRoweetROw="1"3 <column name="Product line" value="Camping ~guipment" ot:ate="OTC" type="string"/~ s/row~ 35 craw detailRow="1" rowsetId="4" rOWSetROw="1" ~.CeC3tOxRCWBetId~"2 n ancestorRowaetRow="1"~ acolumn name="Revcx~ue" value=,20477.329" state="OK" type= "dO11~7~.e" 40 . currency="USD"/~ </row> crow detailRow="0" rowaetld="2" rowsetROta--"2" ancestorRowaetId~"0" ancestorRowsetRow="1"~ 45 ccolumn name="Product line" value="(~ol~ 8quipment" state="OK" type='"FJCZ'lIlJ"/7 c/row~ Cx'Ow C~,eta~.~.ROW="2" ~'OwA~tTd="4" rOwAetRO'4V-"~" anCpBtOXROwAetId="2" ancestorRowsetRow="2"~ -33-

CA 02551197 2006-06-23 ccolumn name="l~vartue' value="5599980.9" state="oIC" type="double" currency="VSa"/> !/rows ~ lrow detaalROw="0' ra~wsetld='2" rowaetRow="3" anaestvr8.owaetId="0" aacestorRowaetRow="1"> ecohunn name=*Pz'od~t lice" va~.ua='Mouataiueering Equipment" stata~aOK" type="string"/> a/raw> crow detailRow~"3" roweetld~"4" xowsetRdotrm"3" ancestorROwsetId="2" aaCe~tarRowaetROw="3"> ~columtmame="Re~nue" value=v0" atata=Nt7K" type="integer" currency="vBD"/~ e/row~ crow datazlROw="0" rowsetzd="z" rcwgetRowd"4" anCeBtOrROwsCtZds"0n 2~ anoestorRowHetROw="i"5 ecOlumn name="Product line" value="Outdovx grbtecti0a" state="OK" ty~ea w 3 triilJ" / > !/Y'OWs crow datailRawC"4" rbwsetld="4" rowaetRow="4"~ anoestorRawsetzd='3" aaaeatorRowsetROar=~4"~ acolumn name="Revoaue" va~.ue="x.535456.2" state="4IC" type="double" CllrrenCy= "QR~" / > !/rOw> crow detailROtN="0" rOwsetId="2" rawsetR,ow="5" anoestorRowsetId="0" aaceatorRowaetRow='1"~ <colus~amame="Product line" value="Personal Accessories" state="dx" type=as~trirlg'/> ~/row> cx~o~r detailRbw="5" roweetld~"4" rowsetRow="5" anceetorRowsetld="Z" aacestorRowsetRow="5"a ~columa x~a~te="Revenue" value="7144797.5" state."a~C" type="double" currency="V8D"/n e/row~ 4$ grow datailRow="o" rowsetzd="3" roweetRow='1" anCestoYROweetId="0" araCestos'RbwsetROw="1"> seolumn name="Revenue" valuew"349505b4" state="bx" typo="double" currency="9SD"/> ~/row~ crow detailRow="0" roweetld="0' rOwsetRow="z" ancestorRowsetad="-1" anceetorRowsetRow="-~.ny ' -34-

CA 02551197 2006-06-23 eaolumn name="Year'r 'V'altle="2005" state--"OK" type.petriag"/a c/x~ow> crow detailRow~'rp" rowsetId="2" rowsetROw~ngn ancestorRcwsetld="0" ' a'~1C~S'~OrROwBetROw="2 " ~ ' ccolumn r,~me="product ~.3ac ~ ,ralue= ~ Gamp~.r~g equipsneat ~tat~=~~~" t~e~ n~t~.".l.Sl~'N /9 c/row~ crow detailRoa~"6" rowaetld="4" roweetRow="6" atlCe8t4rROwF~aId="2 rr a'CiCeStOrRowgetROw="B"a caolumn name="Revenue" value--r'313736p5" state="OK" tied ~dOUble" Cu~'renay. "USD" /a , c/rowa crow detailRow$"o~ rowsetld~'~2" rowsetRow="~" anaeatorROwsetld~"Orr e,acesCOrZ2oWSetRow= rr ~ n ~ ccolumn name="Product linen ~ralue~"Golf Equipment" statrr-"OTZ" . types~etrfxag"/a e/row~ crow detailRow=rr7r' rowsetzd="4" rowaetRoW="7" aaceatorROr~setZd="2'r ax~ceetorltowsetRow="7"> ccolumxa name="Revenue" value="959B~6B.9" state="OK" type='~double" currency=°USp"/a a/row> axow detailROw-'rOrr roWeetId~nan ~w$etRow="8" anaestorRoWeetld~"0'r anCestorRoWSetRow="2"a eaolumn same='rProduct line" value="Mountaineering 3~ 8qu,iPmerit" state=~O~C" type~~'strfng"/a ~c/row> , cxew detailROw='r8" rowaetId="4" rowgetRow~~'r8" anc~e~orRowsetzd="err ancestorRewst~tR,Qw="8"3 caolumn name="Revenue" value=r'9G4a674.5r' state="OK" type="doubleN currency="USD"/a e/rpws crow detailRow="0" rcwsetld="2r' rowsetRow="9" aacestorRowsetxd=~a" aacestcxRv~rsetRow-"2", ' ccdl~umn name="Product liner' value="Outdoor Protection" state=~oK" SU type=~atriag"/~ ~/row~ CHOW Cl~tallROw="9r' r09JSStId~n4n rGwF~~tROW~"9n anceatorRowaetId~r'2" anaestorRowsetRow~"9r'a - 3S

CA 02551197 2006-06-23 <column x~amer"Revenue" value--"988230.64" Btater"DK" types"double" currency="V8D"/> a/row> crow detailROw~",0" rawe~etld=n2" rowgetRow="7.0" anceetorRowsetld~"0" ar~oestorRowaetRow="2"* ecoluma xzame="Product line" valua~"Personal Accessories" state="os:" t,yp~~"st7r~.r~g" /> c/rowy <row detailRow="1p" YOwBetTdr"4" rowsetROw~"1pn ar~cestorRoweetzd=" ~ " ancestorRawaetRoor="10"a <colwrun name="Revenue" value="1095SZ08" state="D~Cp type,. "doublep purrexxey="USV" /a </row> <row dets~ilRcw="0" rowsetzd~"3" rowaetRow="a" - ancestorRow~set=dr"0" ancastorRowsetltow="2"7 . eaolumn names"Revenue" value="62558489" atate~"OK" type="double" cuxv'eriC'y~ ~USD" / ~ d/row~ crow detailRcw="p" rowsetId="0" rOw~setRoW="3" arLee s torRawsetzd=" -1 " ancastorRar~set~tdw="-1"* ccolumn name="xear" value="sops" state="DR" type="string"/* s/rowa crow detailRow="0" rowBetld="2" rOv~setROar="11" ancestorROwsetId="0" ancestorRowsetRow~"3"> <eolumn name="product line" value="Camping Ec~.pm~ant" stat4'~pORp type=qBtring"/a e/row> crow detailRow~"12" rowsetld="4" ac~awsetRow=g11" ancestorRowsetId="2" ancestorRowsetRow="11"a column one="iteveaue" value="37869056" state="Ox" type= °dGU~a.e"' Cu.~sesicy= "VBDh /n c/row7 arrow detailRow="0" rowsetld="a" sowsetRow="12" ~IleestGx'ROw~getTd="p n anoestorRowsetRow="3"a ecolumn ="px~oduet line" value"c3o1~ ~quiptnent" . state='°OR" type="atririg"/> 50 e/row~ crow detailRow="~.a= rowsetTd='~" rOwB~tRow="ia" nrrcegtorRowsetId="2" an.cestorRawsetRow="1a"* -36-

CA 02551197 2006-06-23 ~aolumn name="Revenue" va7,ue="10709a~6y state="OK° typed"double" currencym"U~D"/> e/rowa Know detailRow=~0" roweetld="2" rowsetRow="13" ancestorRCwsetld="0" aac~gtorRoWSetROw="3"> caolumn name--"8roduct line" value="Mauatairieeriag Equip~r~t ~ ~ . state="OK" type="string"/> ' a/row> ~xoar detailRow="13" rowsetxd="4" rowsetRow="13" ancestorRowsetxdr"2~ ari,cestorltowsetltow="13'~ > acolumn names"Revenue" ~ralue=~1124866" state="aK" type="doubt~" currency="U8p"/s e/row~ crow detailRaar="0" rowaetId~"2" xowsetRow="14~ ancestorROwsetId="0" a,ncestorRowsetRow="3"s acolumn name="Product line" value="Outdoor Proteation~ Mate="CK" ' typ~="Str~.n~g" /a 2S e/rows exow detailRow="14" rowsetzd="4" raWSetRow=~T4" aacestorRowset=d="3~ ariGeBtorRoweetROw="14~~, ~oolumz~ name="Revenue" value=~64fi428.04" state--"OK" type="double"_ cutxency="U~D"/n ~/rowa craw detailRow="0" rrnvaetld~."2" rowsetRow=*7.5" anoeOtorRowsetId="o~ . aaceatorROwsetxaw="3"n acoluma name="Product line" value="Personal ,~cessories~ states"OK" type="~ltx'~,ogp/a a/rows grow detailRow="1S" rowsetTd="4" rowsetRows"15" anaemtorRowsetId="2~ anceatoxRowsetRow.,"15"a acoluma name="Revenue" ~tralue~"13793960" state="OK" type--pdauble" currency="USD"/> a/row> Crbw det~iIRCw=~0" rOWSetId~~3" rowSCtRow--"3n ancestorRowsetld="o" aacestorRowsetRow="3u~ ecolumn name="Revenue" value=~74267336" state=pOK" type="doublep currency="U8D"/a a/rowa Crow detailRow="0" xoweetTd-"1" rowsetRow="1" ancestoxk~otwsetld=w-1~ -37-

CA 02551197 2006-06-23 ancestorRowsetROw="-1"a caolumn n,ame$"Revenue" value="1.7157639e~r008" state="OK" type=qdouble" aurrex~ay= "TJSn" / ~ c/rowa e/edgea e/partialDxtaset~ ' [0057] 'The following is an example of the carxesponding data contained within a single partial dataset for the cross tab report 140 in Figure 5: apartia~.nateset versioa="3.o"~ cedge Ord~.nal="0"~ crow detai,lRaw="1" rowsetId="0" xawset:l2ow="1" anG~storROwsstld="-~." an,cestorRowsetRow="-1" cellCoardinate="0"a CCpa.UI~3 ll2~tl~a"product liae_memberCaption" value="Carapix~g Equip~aent" state="oiC" t~3e~"Btz'~.Il~"/? dcolumn, name="Product ai.x~e" value."Camping 8quipmerit" State= "OZC" type="string"/~ s/row5 craw detailRow="2" rowsetTd="o" rowsetRow="~" ancestorRowsetTds"-1" xncegtorltowsetRow="-1" csllCaardiaate="1"a ~coW unn name="Ervduct lirie_memberCr~ption" value="Golf Equipment" state="OIC" type="string"/a acoluma name="Product line" value="golf equipment" atat4="OIC" type="string"/~ e/sowa crow detailRaw="3" rowgetId="0" rowaetRow="3" ancestorRawsetld="-7." anceetorRowsetRow="-1" cellCaardinat:e="2"5 eaalumn x~amrr="product line_memberCaptian" value="Mountaineering Eguipment" state="OK" type="strix~"/s <column name"product line" va~.ue="Mountaineering Equipment" state=~rop~~r type=,rg~.ringn/m c/rOw> crow detailRow="4" rowsetld="0" xowsetROw~"4" anaeZStOr'RpwS~tlda n _ Z,r aucestorRowgetRow="--~." aellCoordinate="3"~ ccOlvmm name="Product liae_memlaerCaption" value="Outdoor ~roteation" state="o~C" type="stxiag"/y <column name="Product line" value="outdoor Protect~.Qn" state="OR" type="stri.ng,r/~ _3$_

CA 02551197 2006-06-23 C/xOWS . <rbw d~tsllRoW="$" 1"OwsetId="Q~ ~'pwsetROW="5n ancestorRowsetzd="-1" anoestorRowsetRow="-1" CellCocxdinate="4"a Ccolumn same=~Praduct line memberCaption" value="Per~aoz~al Accessories" state=~OK" type ~ string~ / > eoolumn name=~Product line" value="Personal accessories" state="OK" ty~e."etr3~l~g"/> e/row5 a/edgea sedge ordinal="1"a crow detailRow="0" rowsetId="0" z~owsetRow="1~ anaestax~owsetxd--"-In ' ancestorRowset~tow="-1~" cellCoordinate="-1"> eavluam, name="Year_me~escaption~ value="zOD4* stated"O1C" type="str~.~ag"/y ccolumn same--"Year" value="2404" state=~p~C'r type=nstrix~g~/> c/row> , crow detailRow="1" rowsetld="1" rowsetlwv="i" aaeestarl~owsetld="0" ancestorRowsetRow=~1~ cellCaordinate="0"a eeolumn name="Quarter memberCaption" value=~2004 C 1" state="pK'~ type="suing°/~ <column name~'Wuartex" value="2004 Q 1" :late="OK~ type="stringN/5 c/~vwy 3U Crow detail,Row="~~ rowsetld="i" rowsetRow=~2n ancr=storRowaetld= ~r 0" azscestorRowsetROw="1" cellCaordinate~"1"> <aoluma uame="Quarter memberCaptian" value="2004 ~ 2" state= "OK'r type="string"/y . Ceolumn name="Cuarte~" value="2004 Q ~'r states"OK" type--"atrfag"/a e/row~ Crow detailTtow="3" rowsetld="I~ rowsetRow="3" axleestorRawaetTd="0" aacestorRowsetRow="1" cellCoox~dinate="2"> aaolumn name="Quarter memberCa.~tion" value="2p04 ~ 3~. state="pIC" typr=="string"/> ~ eaalumn name="Quarter" value="2004 ~ 3" state--"OK" type= ~ Bt x'~.JEZC~"/ > C/rOw> crow detaflRow="4~ rowsetld=~1" rOwsetRow="4" , aucestorRowsetId="On axicestorRowsetRow="1" cellCoordinate-"3"> aGolumn name=RQuarter memberCaption" value="2004 C 4" elate='roR'i typrs~"string~/> Coolumn name="Quarter" value--"Z004 C 4" state="OKn -39-

CA 02551197 2006-06-23 type="string"/a a/rawa crow detailROw="0" rowsetzdr:"0" rowsetRoW="a" ariCe$tol~Rowsetld="-l" as~cegtoxRowsetRow="-1" cellCoox~dina,te~"-1"a aeo7.umri name="Year memberCaption" value="a005" state="oK" tie= n strixlg"/a caolumn name="Year" value="2005" State="OTC" ty~7$="$trixlt~"/7 ZO </xCw> grow data~.lRoar="5" rowsetId="1" rowsetRow="5" azlCe~tosROWBetId~=p n srWestOrRoWSetROW="~" CellCoordinate~~'r4"~ acalumn siame="Quarter metnbesCspticn" value="x005 Q 1" state="OZC" type-",gti'f rig"/y <aolunu~ ae~="(quarter" value="2005 Q 1" state="OK" type="string"/> ~/~w> ZO <raw detailRow="6" rowsetId="1" xoweetRow=rrg" aac~storRowsetxd="D" ancestorRowsetRow="a" tellGoordir~a.te="5"a acolu~ name="QuO.rter memherCapti~" value=*~005 Q 9" f3 tatEr= n pin '_ 2S type."str~.z'1,g"/> <aolumu. name="Quarter" va~,ue="~oo5 Q 2" Stets="OK" type="string"/a </row5 <row detailRow="7" row~setzd="~" xowsetRow.~"7'r 30 anae$torRowe~tId~"0" ance$torRowsetRow="2" cellCoord~.z~ate="6"> <column srame="Quarter memberCaption" valuem"2005 Q 3" state="OK" . type="string"/> 35 <COlumri Ildme="Quax'tsx'" Val.uC="ad05 Q 3" State="OK" type="str~.l7,gn /a </row> <rOw detailRow="8" row~etzd="1" rowsetRow="e* 3IlCe$tOrROW$etld='r ~ aiLC~9tCx'ROws~tROw--"2" aellCoordir~ate="~"> <columrl same="Quarter mzmberCaptia~n" value=n~005 Q 4~. state= "41C" type="strla~g"/> <oalumn ~na~ne="Quarter" value="2005 Q ~" state="OK" 4S type="string"/> </rOw> <rOW detailRow="0" rOWS~tId="0" rOwBetRow="3" azacestorRowsetld="-1 ° a~CeatOx'ROW~etROW--"-1" CelICOOrd~.slate="-1"9 50 acolumn xia~me--"Year memberCaption" value="20D6" state="OK" type="string"/a ccolumn name="Year" value="a006" State="OK" type="string"/a a/rowa - 40

CA 02551197 2006-06-23 crow detailRaW="9" raweetxd="3." xorasetRow=~9" ax~ceetorRowsetad="0" ancer3torRoweetROw="3" cellCOOrd~,rlate="8"~ acolumn name=n~3u,artlr memberCaptioa" value="x006 Q 1" Htate="pKn , type="etriag~/s acolumn zsarne="Quarter" value="006 c~ 1" state="OK~ type="mtrfilg"/y crows Erow detai,lRow="5.0" rowaetId="1" roweetRow="10" aacestorRowsetzd="0" ancestorRrowaet.Row="3~ 'cellCoordialteT"9"s acolumn rime="~.~;arter mlmberCaptiou" val.ue~"006 ~ 2" State ~ "OK'i type="strixlg" / a ecolumn name="Quartlr" va7~ue=~2006 Q 2" state="OK" type="string"/a c/xows crow detailRow="11" x~oweltxd="1" rowaetROw="11" , aneestor'Row6tetrd="0" aacestarlxowsetRow="3" cellCoordinate="10"s .ccoluma name="Quarter memberCaptioa" value--"z006 Q 3~ ~ tRte="pTC" - t~e~,,rgtrix~g"/s acolumn ="Quarter" vaJ.uo="006 p 3" ~sta~a="OR" type="atrirrg" /a e/rows crow detailROw="12" rowsetZd="1" rowsetRovw*la" anaestarRoweetxd="0" ancestorRawsetROw-"3" 30~ cellCoordinate="11"s scal.umn smme~"Quarter memberCapta.dn" value--"006 Q ~" state="OK" type~n~striag"/s sColumti name="Quarter" vaJ.ue="006 Q 4" state="OK" type="string"/> e/row> rt/edgea sedge ordinal="a"5 crow detailRow="1." rowaetld="0" rawseCRow="1" ancestorRowset=d~"-1" arlCe~tOrRoatBetROw=°-1" C~llCaaadiri8te="0"a acolumn name="Revenue memberCaptiass" value="Revenue" state='rOK'~ type="string"/s aaolturuz same="Revenue" value="Revenue" state. "DKn type=" gtrf rig" / ~~ ~/row> /edges ccells3 . acell coordiz~atee="0,0,0"a acolumn name="~ralue" value="3984224.5" state="OK" type="double" aurrancy="~sD"/a e/cella -41 -

CA 02551197 2006-06-23 CCela. COOx'dlnate8="0, p, 1"y ~columa name="value" value="975181" stated"OIC" type="double" currency="L7sI?" /a S s/ceJ:ly <Cell coordinates='r0,0,~"y acolumn name="value" value="0" state="off" type="integer" cu.srericy="USD"/a ~/Gel1> 14 cell coosdi~utes$"0,0,3"> eeoluma name="value" value="391983.9" state--"OKx types"double'r currency=f'U8n"/> a/cella . 15 eaell coordinates="0,0,4"~ scoluttnn name="value" value="131g~078.74" state="03:" type="double" currency= "~U" / > ~/celly . 20 <cell coora~,rratee~"0,1, o"> . seolumn srame="value" value="50'75177.96" state="OIt" type="dOUble" cusr~ncy="CTBD"/> e/cell> 25 acell coordinates="0,1,1"y ~colvtrnn name="value" Values"1871413. a" state="Dx" type--"double" currency~'~U9D"/~ ~/oe~.~.a 30 ~eell coordinates="0,1,3"> ecolumn name="value" value="Dx state="~FC~ type="io,tegar" currency="U'8D" /> a/cell> call coordinates="0,x,,3"> 3$ ccolumn name="value" value="611625.92" state="OTCs type="double" Cusxency="UBD"/> a/cella ccell coordinates="0,1,4". 40 ccoluma name="value" value==1678313.76" state~"OlC" type="double" curroncys"USD"/5 e/cell> acell Cooxdi~.ates="0,3,0"> 45 <colvms~, name="~xalu!" value--"4645255.82" state="OTt" type-"double" currency= "ZTBD" / > a/Cell> CCAll COOrd'll7dt8~="p,3,1"y 5~ SCOluLml riBItIA="value" va7.ue="x.169527.46" state="OK" typ6~"double" ' Currenay~"USD"/a ~/aell> ecell coordinates="0;2,2"> - 42

CA 02551197 2006-06-23 ceolumx~ name="value" value="0" state="Og" type="integer" Curret~cy= "Vl3a" / s ~/cella <Cell ooorBi~late~s="0, 9, 3"~ $ ' ccolurmx name="value" value="4T7277.9~k" AtRtmCllox" type="doubt~" Cur~riCy= "iT3D"/ a c/Cella <Cell coordixiatee="0,2,4"y CCOIum?'1 ="V'a111e" value="1704449.46" state="OR" type="double" curreney~"U~SD~/a , '</cella ~cel1 Coordinatesr"0,3,0"a 1$ aCOlumn ~srne="value" value="6'766fi7a.fi" sf,ates"OTC" type="double" aurrencys"Ut9n"/s a/eell> cell aoordimates=°0,3,1"a~ ~c0lu~ nente="value" value="1587.859.2" state="OK" type="double" CurrBIlCy="U8D" / a c/CellS cCell coordixiates="0,3,2"a acolumis acme="value" value="0" tatate="OR" type="integer' curzency="D'~D"/s e/Cells ~Cel7. cocrdiriates="0, 3, 3 "a ccolumn n8,me="value" value="125578.48" state="OK" type="double" . currency="USD"/> ~/cell.a ~Cesl coordinates="0,3,4". ccolumn lame="value" valuem"9447955.56" state="Q~C" type="double" currency= "LTSD"/a a/cella <Cell cooxdi~e,tee="0,4,0"a ccolumn name="value" value~"5638050.96" state="OR" type="double" currency="VSD"/n a/cella ecell COOrdixiates="0,4,1"a acolumn same="value" value="1553x49.68" state="OK" type="double" e~Cells ~Cel.~. Caordirlates="0, 4, 2"5 acalumn name="value" value="1469736.86" state="OR" type="double" aurrenCy="USD"/> a/aell> caell coordinates="o,4,3"> - 43 -

CA 02551197 2006-06-23 dCOluil~l a"valu6" value--"$127$3.46" States"Ox" ~,ype= trd,ou301e" ' ~c/ce~.ly

~cel1 coordinates="0,4,4"a

caolumn name="value" value='r173~.011. 08'r state.,"OiC"

type="double"

currency="UBD"/a

c/cell~

<cell coordinates="p,5,o">

~ca~.umn name="value" value="8479008. 16" state="0~"

ty X34'= "d0'll~le"

currency="U8n"/a

</aeli>

ccell coordir~atee="0,5,1">

<columa name="val.ue" value="3763379. 96* mate--"OIt"

ty~e~"double"

currar~oy="USn"/>

C/C~117

ccell coordinates="o,5,a">

acolumx~ name="value" value="3149221. 4$ Htate="OIC"

type="doub7.e"

cuxrenGy-"USn"/>

c/Gella

cceil coordis2ate~1-"0, S, 3"a

aeolumn name="value" value="343~3B.86" state="OK"

type="double" .

currenoy="U~sn~/a

c/cell>

coell ooordiriates="O,s,4"~

<cOlwnn name="value" value="3976315. 82" state="OK"

type="dOUble"

currency= "T~BD"/a

~/oella

ecell vvvrda,z~ate~="0, 8, On,

<column name="value" value="7760772. 76u state=pox"

typo="double"

currency "USD"/a

a/cella '

ecGli Goord27na~es="0,6,1">

evolumr~ name="value" value="1485203. 4x" state="pR"

tape-"double"

currency "USD" / >

</cell> '

acell coordinates=*0,6,3"a

acolumn names"value" value="31$1671. 86" state="Ox"

types II dOL~~.~"

currency="Ui~n"/a

~/cella

<cell covxdinatee--"0,x,3"?

acolumri dame="value" value="316900.8 6" state="OR"

type="double"

</aell> currency="U8D"/s -44-

CA 02551197 2006-06-23 scell ooardi.aates="D.6,4"a

~colunai name="value" value="2750767.14" state="OR

type="dOuble"

curxex~y="USD"/a

~/cella

EcaZl aoordix~~at~s"0, 7, 0">

~oolumn name="value" value"9495774.58" state="OR"

type-"double"

Ou7~'eziCy= U8D" / s

a/ael~.a

aCel7, Cooz'dinateS="0, 7,1"a

acalumn name="value" value="2796488.82" state="OK"

type="double"

CurrerlCy="aSD"/a

</cella

eaell coordinates="0,9,2"a

acolulmi r~aae="val~xe" values="x842044.34"state="did"

type="doulalrr"

curxericy="VSD"/m

2D, e/cella

aCell COOrC~~.~$tg~="D, 7, 3"5

acolumn name="val.ue" value="114608.46" estate="OK"

type= "do~ibW "

currency="USD"/a

a/Cella

<Cell Coordinates="D,7,4"a

~aolumn ="value" ~r8lue="3497714" ~3t ate="OK"

type="double"

cursenGy="USD"/a

c/celly

eceLl Coorditlates="0,8,D"a

Ecolumn, ~,ame="value" value="8162650.72" state="DK"

type="double"

aurrenay="vsD"/~

~/cel7;a

~c~ell coord3rrates="D, e, i"a

~aolumn name"value" value="Z7952t9.58" state="OTC"

type."do~xble"

currency="U8p"/a

~/cella

aCell Coaxdinatesra"0,8,2"a

ccolumn name9"value" value="1848903.76" estate="OIL"

type="double"

currency="Q8D"/a

</oella

ecell aoordiaates~"D,8,3a

ecolumn name--"value" value="121930.9" state="Ox"

tlrpe= "double"

CursessCy= n USD"/ a

e/oella

<cell coordinates="D,8,4"a

~columri txi~ne="value" value="2a7e7ii.36" state="OK"

type="double"

cusrrrncy="USD"/5

~45-

CA 02551197 2006-06-23 e/Cella eoell cooxdinate8="0,9,n°, ccolu~ name="value" value="9449464.78" state="OK" type="double" currencyy uVI~D° /y ~/ae~,1* acell covrd.inates="0,9,1"s ccolumia name="value" value="3559611.16" State="aK" ty8~="double" cuxxe'ncy="USD"/~ a/Cell~ acell coordinates="0,9,2"* ~colusnn name--"value" value=n3$384~.Q.72" sate="OK" t~7e= "dOtlb~. a I$ curreneY="UgD"/y zo zss/oelly Ccell caoaedinateea"0,9,3", ~colucntx name="value" value="23x016.54~ state='OK" type="double" ~laelh ecell coordinates="0,9,4"* tcol.umn name="value" value="3612369.55" state="OIL" type="doub~.e" ~/o~ii~ - ccell coordinate8="0,10,0"> ~oalumn name="value" value="7370377.24" state--"OK" t~8="double" r/Cell> aceil Coordinates="0,10,1"a scolumn name="value" value="2152470.24° State="OfG" ty~= rr ~ub1 a rr ~/celly scell coordinates="0,10,2"a dcoW unsm~rri~e="'value" valuem"2392993.94" state--"OK" type="double" Currency="U~D"~~ C/Cell7 4C~1~. CobY'dit7$te8="0, 10, 3"y ceolumn name="value" value--"182489.8" state="OK" type="double" currency="LTSa" / * /call tCell coosdinAteB="0,1,0,4x> ~COlumn name="value" value--"3073856.14" state="OK" tygeT"dOUble'r currency="Q5p~/* a/cell~ cCell COOxdiTiat~B--"Or11,0"a Kcolumn nameC"value" value="1298856.96" state=wOK" type="double" Ouxreney="USD"/y ~46-

CA 02551197 2006-06-23 ~/aeiz~ ecel~ coordinates="4,11,x."~ <COlulritl~ l7la~="valliE" value="320D914.86" Mate-"OIC'r type= a dOUble" currency-"U'SD"/~ C/CE1~3 cell coordinates="0,11,2"~ ecolumn name="value" vaJ.ue="3568767.6~,r state="pK" type="double" currEacy="U~n"/a a/cell~ acell aOdx~dinates="D,yl,3"y ccolumn dame="value" value="99990.8" stage-"pKrr type-"double" curreanCy="USD"/a . a/cell~ ceell coordinates-"0,11,4"a acclumxi name="value" value--"48a9D23.~4" state="pK" trype="doubl.e" cuxre~Cy~"USA"/~ e/c~l~~ a/cellsy a/part:falpatasetn Equival ce of Layout. Inforntatio~al,~nd Data Objects [OOSSJ The following table attezx~pts to provide a mapping between elementslobjects in an original report layout specification, the RSAPI informatiDnal objects, an the RSAI'Z data retrieval objects. Original report Corresponding RSAPIxiSAPI Data Retrieval layout Informational Oh Ob ect s ecftication eet

___ Data item reference.IRBCoIumnInfo ~ lltSColumnValue

Dimenaxox~al propertyIRSCoIumnInfo IRSCoIumnValue reference.

Value set. IRSRowsetInfo IRSEd eIterator

Headerlfootez. IRSRowaetTnfo, IRSEdgeIterator . ZRSRowsetLa out

Group. IItSRowsetLayout, IRSEdgeIterator::GetAncestor IRSLevellnfo _ -

Ed ntSEd eInfo IRSEd Iterator

La out s ecification.IRSDatasetInfo TRSPartialDataset

[0059] The systems and methods according to the present invention may be implemented by any hardware, software or a combination of hardware and software having the -47-

CA 02551197 2006-06-23 fanotiona described above. The software code, eithea in its entirety or a part thereof, may be stored in a computer readable memory. ~rther, a computer data signal representing the software code that rnay be embedded in a carrier crave may be transmitted via a communication network. Such a computer readable memory and a computer data signal are also within tl~e scope of the prosent inveritioa, as wall as the hardware, goftwaxe and the combinatiaa thereof. [0060] While particular embodizuents of the present invention hare been shown and described, changes and modiflcationa may be made to such embodiments without departing from the true scope of the invention. _aig_

Read more
PatSnap Solutions

Great research starts with great data.

Use the most comprehensive innovation intelligence platform to maximise ROI on research.

Learn More

PatSnap Solutions

PatSnap solutions are used by R&D teams, legal and IP professionals, those in business intelligence and strategic planning roles and by research staff at academic institutions globally.

PatSnap Solutions
Search & Analyze
The widest range of IP search tools makes getting the right answers—and asking the right questions—easier than ever. One click analysis extracts meaningful information on competitors and technology trends from IP data.
Business Intelligence
Gain powerful insights into future technology changes, market shifts and competitor strategies.
Workflow
Manage IP-related processes across multiple teams and departments with integrated collaboration and workflow tools.
Contact Sales