多维分组运算符的制作方法

文档序号:6382073阅读:246来源:国知局
专利名称:多维分组运算符的制作方法
技术领域
本发明涉及数据聚集和数据查询,尤其涉及各种数据源上的多维查询技木。
背景技术
语言集成查询(LINQ)及其支持技术提供方便且声明性的简写查询句法(例如,类似SQL)以便于在编程语言(例如C#、Visual Bas1-等)内部对查询的指定。更具体而言,提供映射到较低层语言构造或原语的查询运算符,诸如方法和拉姆达表达式(lambda
expression)。提供用于各种运算(例如,过滤、投影、联结、分组、排序......)族的查询运
算符,并且查询运算符可包括但不限于映射到实现这些名称所表示的运算符的方法的“where” 和 “select” 运算符。通常,LINQ查询被指定,并相对于诸如关系存储和/或非关系存储之类的任意数据集合执行的。在关系存储或数据库中,根据ー个或多个表来结构化数据。各个表是包括多个行和列的关系,其中列(被称为属性或维度)以及行(被称为记录)捕捉具体实体实例的数据。在非关系数据库或键值存储中,非关系数据库或存储表示将各唯一键映射成ー个或多个值的集合的简单数据模型。更具体地,非关系数据库存储值和便于基于键来定位所存储的值的索引。就关系数据源而言,常见实现通常包括业务信息(BI)分析。例如,在线分析处理(OLAP)数据源是ー种可接收并执行查询的关系数据源。OLAP数据源在基于多维能力和特性的业务信息(BI)分析中是有益的。关系数据库且尤其是OLAP数据源通常包括对诸如“Rollup”和“Cube”等运算符进行分组,以便汇总各个表。“Rollup”和“Cube”两者都是“GroupBy”运算符的扩展,“GroupBy”运算符允许依据一个或多个列中的数据来对跨各记录的数据进行分组,且该“GroupBy”运算符通常结合诸如“Sum (求和)”、“Count (计数)”、“Min(最小化)”或“Max (最大化)”之类的聚集函数一起使用。“Rollup”运算符跨指定的列或维度计算多个级别的任何潜在聚集,并且还计算总数之和。这样的总数可被插入作为汇总行。“Cube”运算符计算所提供的分组列集合的所有组合的小计,且由此生成由“Rollup”运算符产生的所有值加上与附加组合相关联的值。

发明内容
下面呈现了简化的发明内容,以便提供对所公开主题的某些方面的基本概念。本发明内容不是广泛性的概观。它并不_在标识关键/重要元素,也不_在划定所要求保护主题的范围。其唯一目的是以简化形式呈现ー些概念,作为稍后呈现的更具体实施例的序言。简言之,本发明一般涉及多维分组运算符。分组集合运算符可被扩展为查询包括非关系数据源的任意数据源。分组集合运算符可被转换成对象,且具体地被转换成包括函数序列的多维语言集成查询(LINQ)对象。通过将分组集合运算符转换成带有函数序列的LINQ对象,基本上可对任何数据源执行多维查询。具体而言,取决于所实现的分组集合运算符的类型(例如,复制“Rollup”功能的分组集合运算符,复制“Cube”功能的分组集合运算符等),分组集合运算符可被转换成包括分别与基于每ー键选择器的数据分组相对应的函数的序列的LINQ对象。此外,LINQ对象可包括使得能够高效获取查询结果的嵌套结构。为实现上述及相关目的,在此结合以下描述和附图描述了所要求保护主题的某些说明性方面。这些方面指示可实践本主题的各种方式,它们均落在所要求保护主题的范围之内。当结合附图阅读以下详细描述时,本发明的其他优点和新颖特征将变得显而易见。


图1是查询处理系统的框图。图2是代表性转换组件的框图。图3是代表性转换组件的框图。图4描绘代表性转换组件的框图。图5描绘被优化以包括嵌套结构的示例性数据结构。图6是便于在任意数据存储上执行分组集合运算符的系统的框图。图7是ー种基于分组集合运算符和键选择器来聚集数据的方法的流程图。图8是ー种生成多维LINQ对象的方法的流程图。图9是示出用于本公开各方面的合适操作环境的示意性框图。
具体实施例方式常规上,关系数据库分组运算符聚集数据,以便产生表格形式的标量结果集。如上文讨论的,“ Rollup”和“ Cube”是这种基于特定键选择器来聚集数据的分组运算符,其中键选择器引用关系数据库中列的各行。这些分组运算符仅允许来自关系数据库的数据的表格表示。鉴于“Rollup”和“Cube”的这ー表格数据表示限制,分组运算符的执行导致过多的“NULL (空)”值,在“NULL”值中由于使用分组和聚集而不存在数据。然而,这些“NULL”值不被用于表示源中不存在数据,而用于表示由于必需以“矩形”方式表示数据的限制而导致的結果。例如,“NULL”值在常规上被插入到參与分组的各列中不存在数据的地方(例如,“Rollup”和“Cube”可导致具有“NULL”指示符的不同行)。一般而言,诸如“Rollup”和“Cube”之类的常规运算符被限于关系数据库(即关系数据表示)以及相关联的表格表示,并且在结果中注入易混淆的“ NULL”值。下面的细节大体针对多维分组运算符。一般而言,查询运算符且更具体的是分组集合运算符可在包括非关系源的任意数据源上运算,并且可基于键选择器来聚集数据和实现多维結果。如上文讨论的,常规的分组运算符是针对关系数据源而被指定的,且基于表格数据结构在该关系数据源上执行,在表格数据结构中,键选择器定义数据的分组(例如,聚集)以及作为对关系数据源中列的各行的引用。通过将分组集合运算符扩展为用任何键选择器(例如,不仅仅是对列的各行的引用)来执行,可以查询任何的任意数据源(例如,关系数据源、非关系数据源等),并且可以产生多维結果。根据本发明的一方面,取决于所实现的分组集合运算符的类型(例如,“ Rollup”、“Cube”等),分组集合运算符可被转换成包括分别与基于每ー键选择器的数据分组相对应的函数的序列的对象。作为示例而非限制,该对象可包括“GroupBy”函数调用的序列,以便返回针对特定数据源的一个或多个键选择器的数据分组。这样的分组集合运算符不限于关系数据源,并且可提供多维結果。现在參考附图更详细地描述本发明的各个方面,在全部附图中用相似的标记来指示相似或相应的元素。然而应该理解,附图及其相关详细描述不g在将所要求保护的主题限于所公开的具体形式。相反,其意图是覆盖落在所要求保护主题的精神和范围之内的所有修改、等价物和替换的方案。首先參考图1,示出了查询处理系统100。一般而言,查询处理系统100可在基于键选择器来聚集数据的查询内利用分组集合运算符。查询处理系统100可被配置成采用分组集合运算符,该分组集合运算符针对包括非关系数据源以及关系数据源的任何的任意数据源来指定数据聚集。具体而言,查询处理系统100包括转换组件110,转换组件110被配置成创建允许在任意数据源上处理并执行多维查询的对象(例如,在下文中更详细地讨论该对象)。作为示例而非限制,该对象可以是多维语言集成查询(LINQ)对象,LINQ对象作为查询的表示(例如,具有键选择器的分组集合运算符)。可以理解,本发明可采用任何合适的编程语言多维对象,并且LINQ对象被用作ー个示例。多维对象可用编程语言来指定,编程语言诸如但不限于C# ,Visual Basic . Java* ,Ruby1i等。由此,此处对LINQ对象的引用还可包括任何合适的编程语言多维对象,且不g在将主题限于LINQ样式对象。这样的表示可例如通过LINQ提供者(未示出)被转换成任何目标数据源。換言之,包括分组集合运算符的查询提供便于跨多个不同数据源产生经聚集的数据的统一表示。查询处理系统100基于统ー表示(例如,对象、LINQ对象等)来实现数据聚集。可针对包括非关系数据源和关系数据源等基本上任何数据源来采用该统ー表示。更具体地,统ー表示可被转换或变换成查询处理弓I擎等的数据源专用表示。这样的引擎可针对统ー表示来执行查询,并且进而相应地提供经聚集的数据。具体而言,统ー表示可由在线分析处理(OLAP)引擎来处理,该OLAP引擎不仅将分组集合运算符扩展到任意数据而且扩展到业务信息(BI)数据源。換言之,查询处理系统100可利用带有分组集合运算符的OLAP样式查询,以便提供挖掘和/或钻入任意数据源的精确数据。统ー表示便于查询大的数据集合,且尤其是大的BI数据源集合。例如,在业务信息分析中,需要钻入大的数据集合以供进一歩分析。这种类型的钻入或向下钻入数据是多维分组的使用所涉及之处。作为示例,用户可在年度基础上分析平均销售数字。用户可从所收集的统计数据中发现薄弱年度。用户随后可能想要向下钻入每一年以及每ー产品分类的平均销售,以便进一歩分析与该薄弱年度有关的数据和情況。这ー数据分析过程可不断进行,从而探索并挖掘数据集合。图2更详细地示出代表性转换组件110。转换组件110被配置成生成允许分组集合运算符对任何的任意数据源执行数据聚集的对象。換言之,关于转换组件110的以下描述生成可由基本上任何引擎、查询提供者等处理的统ー表示,以便产生来自任何数据源的查询結果。转换组件110还包括被配置成分析代码的分析组件210。作为示例而非限制,代码可包括查询、分组集合运算符、键选择器、目标数据源等。分析组件210可标识分组集合运算符以及至少ー个键选择器。转换组件210还包括被配置成生成对象的构建组件220。该对象可以是任何基于LINQ的对象,然而g在包括以编程语言创建的任何面向对象的结构。具体地,该对象可以是多维语言集成查询(LINQ)对象(也被称为“LINQ对象”)。具体地,构建组件220可基于分析组件210创建LINQ对象。一般地,任何面向对象的结构可被类型化和/或可包括函数序列,其中每ー函数对应于该结构表示的分组集合运算符所定义的数据分组。可以理解,尽管本文讨论了 LINQ对象,但本发明g在包括可表示分组集合运算符的任何面向对象的结构。具体而言,构建组件220生成LINQ对象,以便包括与分析组件210所标识的分组集合运算符对应的函数序列。该函数序列可定义多维LINQ对象,使得该序列中的各函数中的每ー个对应于基于键选择器或键选择器的组合的数据分组。键选择器通常是对关系数据源中的列的各行的引用。然而,根据本发明,此处利用的键选择器可与定义哪些数据要鉴于分组集合运算符而被分组的特性的任何函数有夫。換言之,键选择器可以是但不限于分组集合运算符可执行以聚集数据的对列的各行的引用、函数等。因此,可针对分组集合运算符创建多维LINQ对象,使得多维LINQ对象表示多维查询(例如,针对目标数据源的具有键选择器的分组集合运算符)。此外,构建组件220可包括该函数序列中的每ー函数的“GroupBy”函数。因此,针对分组集合运算符的LINQ对象内的每一分组由“GroupBy”函数 来执行,以便基于键选择器的组合来聚集数据。这样的技术允许对非关系数据(除了关系数据以外)执行多维查询,因为姆ー查询被转换成“GroupBy”函数的序列。具体地,“Rollup”运算符可产生结果集,该结果集表示由键选择器所标识的所选列中的值的分层结构的聚集。作为示例,该结果集可包括空分组、依据键选择器i的分组、依据合成的键选择器ェ和键选择器2的分组,…,以及按合成的键选择器ェ、键选择器2、键选择器N的分组,其中“N”为正整数。此外,“ Cube”运算符可产生结果集,该结果集表示由键选择器所标识的所选列中的值的所有组合的聚集。作为示例,该结果集可包括所有组合,诸如空分组、依据按键选择器的分组、依据键选择器2的分组、 、依据键选择器N的分组(其中,“N”为正整数)、依据合成的键选择器i和键选择器2的分组、依据合成的键选择器i和键
选择器3的分组、 、依据合成的键选择器H和键选择器N的分组.....以及依据合成的键
选择器1、键选择器2、 、和键选择器N的分组。例如,复制该“Rollup”的功能的分组集合运算符可以用键_选择器和键_选择器2来标识,其中对应的LINQ对象将包括三个函数的序列。第一函数可表示作为整个目标数据源集合的数据分组;第二函数可表示基于键_选择器i的数据分组,而第三函数可表示基于键_选择器i和键_选择器2的数据分组。至少部分基于利用了具有“GroupBy”函数的序列的LINQ对象的分组集合运算符,可以对非关系数据源执行这样的多维查询(例如,这里是具有键_选择器和键_选择器2的“Rollup”)。可以理解,分组集合运算符用基于该分组集合运算符的各属性的函数的序列来规定针对各分组的键选择器的组合。作为示例而非限制,分组集合运算符可复制“Rollup”运算符和/或“Cube”运算符的功能。上文讨论了就具有引用多列的各行的键选择器的关系数据源而言,“Rollup”和“Cube”的分组特性。对“Rollup”和“ Cube”的引用与分组数据的属性有夫。可以理解,可以采用具有任何合适的键选择器组合的任何合适的分组集合运算符(例如,“Rollup”、“CUbe”等)。換言之,本发明g在包括基于键选择器来创建数据的分组的任何分组集合运算符,其中,分组集合运算符可利用键选择器的任何组合来创建这样的数据分组。另外,可以理解,可采用具有主题创新的、与“ GroupBy”运算符相当的任何合适的函数。
图3更详细地示出表示性转换组件110,转换组件110构建多维语言集成查询(LINQ)对象以便对非关系数据存储执行。一般而言,转换组件110被配置成采用对非关系数据执行以便产生多维查询结果的分组集合运算符。转换组件110包括分析组件210,分析组件210被配置成从一部分代码中标识分组集合运算符以及至少ー个键选择器。具体地,分析组件210可包括键组件310。键组件310可从该代码中收集标识出的键选择器。可以理解,键组件310可标识任何合适的键选择器,诸如但不限于作为函数的键选择器。分析组件210还包括序列组件320,序列组件320被配置成分析分组集合运算符,并且为该分组集合运算符定义ー数量的分组和/或为该数量的分组中的每ー个定义键选择器的组合。換言之,键组件310和序列组件320可标识分组集合运算符的种类、以及通过该分组集合运算符来定义的数据分组。作为示例而非限制,分析组件210可为标识出的分组集合运算符查明以下各项基于键选择器数量的分组数量;定义分组中的每一分组的键·选择器的组合等。继续图3,构建组件220可生成多维LINQ对象(也被称为LINQ对象)330。如上所述,LINQ对象330可至少部分基于分析组件210来创建。具体而言,对分组集合运算符所创建的LINQ对象330包括函数序列,其中该序列中的各函数中的每ー个对应于基于键选择器或键选择器的组合的数据分组。一般而言,LINQ对象330包括“GroupBy”函数的序列。因此,使用LINQ对象330将多维查询转换成各单维“GroupBy”函数的序列,使得每ー函数对应于键选择器或键选择器的组合所定义的数据分组。此外,构建组件220可包括该序列中的各函数中的每ー个的类型(例如,也被称为基于键选择器或键选择器的组合的每ー数据分组)。具体而言,每ー函数的类型可对应于数据分组的定义。例如,在具有针对复制“Cube”运算的分组集合运算符的两个键选择器的示例中,该序列中的函数的第一类型可以是“Empty (空)”,以示出数据分组是所有数据;该序列中的函数的第二类型可以是“First (第一)”,以示出数据分组基于第一键选择器;该序列中的函数的第三类型可以是“Second (第二),,’以示出数据分组基于第二键选择器;而该序列中的函数的第四类型可以是“Both (两者)”,以示出数据的分组基于第一键选择器和第二键选择器。例如,“ Cube”的分组集合运算符可以用键_选择器1、键_选择器2和键_选择器3来标识,其中对应的LINQ对象将包括八个“GroupBy”函数的序列。第一函数可表示作为整个目标数据源集合的数据分组;第二函数可表示基于键_选择器i的数据分组,第三函数可表示基于键_选择器2的数据分组,第四函数可表示基于键_选择器3的数据分组,第五函数可表示基于键_选择器i和键_选择器2的数据分组,第六函数可表示基于键_选择器!和键_选择器3的数据分组,第七函数可表示基于键_选择器2和键_选择器3的数据分组,而第八函数可表示基于键_选择器”键_选择器2和键_选择器3的数据分组。此外,各函数中的每ー个(例如,第一函数至第八函数)可被类型化,以便标识各分组中的每ー个的基础(例如,键选择器组合的定义)。至少部分基于利用具有“GroupBy”函数的序列的LINQ对象的分组集合运算符,可对非关系数据源执行这样的多维查询(例如,这里是采用键_选择器ェ、键_选择器2和键_选择器2的“Cube”)。图4更详细地示出在LINQ对象内创建嵌套结构的代表性转换组件110。转换组件Iio被配置成扩展分组集合运算符(例如,“Rollup”、“Cube”等),以便至少部分基于多维LINQ对象330来在非关系数据上操作。LINQ对象330可以是使得任何引擎、查询提供者、或数据源能够执行包括分组集合运算符的一部分代码的统一表示。一般而言,可将LINQ对象330传递给目标源,以便以对应于这一目标源的编程语言的特定编程语言来转换。具体地,引擎、查询提供者、或数据源可直接提供这样的统ー表示(例如LINQ对象330)的转换,以便该代码被执行。作为示例而非限制,LINQ对象可以用任何查询提供者、OLAP引擎、MDX引擎、数据源外壳(下文中将详细讨论)等来统ー实现,使得LINQ对象被转换以供在相应的目标数据源上执行。转换组件110还可包括优化组件410,优化组件410被配置成将嵌套结构注入LINQ对象330以便高效地评估查询(例如,使用键选择器来调用目标数据源的分组集合运算符)。优化组件410可以按降序对数据分组(基于键选择器或键选择器的组合、由“GroupBy”函数所表示的分组集合)进行排序,以使得更具体的分组能够被首先计算。例如,按大小对分组进行排序(例如,更多的键选择器导致更小的分组)允许小得多的分组被聚集成更大的分组(例如,消除了ー个键选择器相当于聚集所有更小的子分組)。換言之,通过在较不具体的分组之前计算更具体的分组,可以获取附加的计算得到的結果。这ー降序计算使得附加的计算得到的结果能够被产生,这些附加的计算得到的结果稍后可被实现以供对将来查询的懒散评估。作为对比,常规上,在关系世界中,一个查询通常需要计算所有结果且不能是部分懒散的(例如,要求“Cube”将通过向下钻入经聚集的数据来返回所有潜在的分组(包括包含所有元素的分组)可受益于懒散评估(例如,不需要获得大分组的细节))。换言之,降序计算产生特定分组的计算(基于分组集合运算符无意地计算更一般的分组),使得当查询请求由于具体分组的计算而已被计算的分组时,该查询请求的结果可被直接提供(例如,懒散评估将不计算除了要被计算以提供结果之外所需的任何附加计算)。作为示例而非限制,可以计算来自图5的EMPID (雇员ID) 570的具体SALES (销售)590分组,具体SALES 590分组将基于分组集合运算符计算更一般的来自图5的分组EMPID 550和SALES560。对于请求来自更一般分组的数据的附加查询,懒散评估可被实现以便直接提供結果,而无需基于该降序计算策略的附加计算。例如,分组集合运算符的LINQ对象可被构建,以便包括基于键选择器的各种合成分组,其中,各种合成分组的执行可被有效地实行以便展示可嵌套在LINQ对象内的附加结果。換言之,获得针对特定合成分组的结果可产生包括在LINQ对象中的嵌套结构内的附加結果,以便在产生附加查询的结果方面增加效率。如上文讨论的,该基于降序来执行分组以便为未来查询搜集附加结果可被称为“懒散评估”。转向图5,描绘了被优化以包括嵌套结构的示例性数据结构500。数据结构500包括列“EMPID (雇员ID)”、“YEAR (年度)”和“SALES (销售)”。嵌套可使得这些列能够被压缩成更具体的包括EMPID 520和YEAR 530的结构。数据结构510示出基于键选择器“EMPID”和“ YEAR”的分组集合运算符(这里是“Rollup”)。如图所示,分组可被扩展以包括嵌套结构,使得 SALES 540 可被扩展成 EMPID 550 和 SALES 560,而 EMPID 550 和 SALES 560 可被进ー步扩展(例如,钻入)成EMPID 570,YEAR 580和SALES 590。数据结构500和510在下文更详细地讨论。关系数据库通常包括允许依据ー个或多个列来聚集数据的分组运算符。另外,关系数据库提供以ー个语句来创建多个“分组集合”的联合的能力。这样的运算符缺少关系数据库的域以外的更一般查询,且可被泛化以便适用于更多种类的数据。另外,关系数据库中分组集合的表达性由于需要以“表格形状”呈现数据而被限制。如本发明中所描述的,这可使用对象图来避免。用于使用各种策略来分组数据的查询运算符可被建立。这些策略中的最一般的策略允许分组集合的制定;用于选择分组集合的更具体的策略包括“Rollup”和“Cube”。所返回的分组对象准许使用面向对象的技术来进行简单分析,包括访问者模型。本发明允许以下各项以查询综合句法(例如,其參数返回等于指定键的数目的元数对象)制定分组轴(例如,复制“Rollup”或“Cube”的分组集合运算符);将多维分组转换成正则分组;将合成分组表示成对象图;对分组的静态类型化;生成表示合成分组的类型,以及相关联的运算符;使用LINQ的在线分析处理(OLAP)样式查询;以及将多维分组运算符转换成在线分析处理(OLAP)引擎(例如,可将OLAP引擎针对多维表达式(MDX)、电子表格应用分析引擎等)。具体而言,以查询综合句法(类似SQL的句法美化)来制定分组轴可以指以综合句法在任一任何数据源上利用分组集合运算符。此外,分组集合运算符可针对本机句法来指定(例如,用点来标记与运算符对应的方法)。 LINQ中典型的分组构建涉及单个键选择器,并且生成分组序列,分组中的每ー个具有不同的键。姆ー个这样的分组本身包括序列,该序列包含该组的元素。作为示例,可枚举序列(例如,一系列基于拉取的数据)可被讨论,但是可以理解所有东西也适用于可观察序列(例如,基于推送的数据)。以下是典型的GroupBy运算符的签名static IEnumerable<IGrouping<K, T>>GroupBy<T, K> (thisIEnumerabIe<T^source, Func<T,K>keySelector);消耗“GroupBy”操作的结果使用IGrouping对象上的键属性,IGrouping对象被返回以分析包括当前组的键。由于姆ー IGrouping<K, T>也是IEnumerabIe〈T>,因此该组的元素可按以下来迭代
var res = from p in products group p by p. Category;
foreach (var g in res)
{
Console . WriteLine {''Products in " + g . Key. Name) ; // 这里,g. Key
将是"Category (类型)”,K名称属性返回该名称foreach (var p in g)
Console . WriteLine (" + p.Name) ; // 分组包素,这里为产iWj。
}分组常常结合聚集来使用,以便计算关于每ー个别分组的统计数据。以下示出了ー个示例,其中从产品目录中计算每组的平均价格var res=from p in products group p by p. Category intog selectnew {Category=g. Key, Avg=g. Average (p=>p. Price)};在相当的ー些分析场景中,一个人想要向下钻入大的数据集合,以便进一步对其分析。这是多维分组的使用开始产生的地方。例如,ー个人可能想要在年度基础上查看平均销售数字。从所收集的统计数据中发现薄弱年度,下ー问题可能是要向下钻入每一年度和每ー产品类别的平均销售。这ー数据分析过程可不断进行,从而探索并挖掘数据集合。如所讨论的,关系数据库已经提供了自动化这一重复分组处理的方式,其中计算得到的分组的键以若干方式变化。选择键的组合以便分组在下文中可被称为“策略”。两种策略是常见的,如下所解释的对键集合k1,,…,kn(其中"n”是正整数)的ROLLUP涉及:具有空键(SP,数据本身)的分组依据Ic1进行分组依据合成键k,、进行分组 …依据合成键ki,k2,…,、进行分组对键集合Ic1, ,kn的(其中"n ”是正整数)CUBE涉及具有空键(SP,数据本身)的分组依据Ic1进行分组依据k2进行分组…依据、进行分组依据合成键Ic1,k2进行分组依据合成键Ic1,k3进行分组…依据合成键Iv1,kn进行分组…依据合成键ki,k2,…,、进行分组換言之,“Rollup”运算符在给定键列表的情况下建立増量式分组。对于“n”个键,建立总共“n”个分组,“n”个分组以单个键分组开始、一直到基于所有键的分组。“Cube”根据该给定列表创建所有可能的唯一键组合(例如,具有ー个键的分组,具有两个键的分组等等)。
两个运算符的泛化是GROUPING SETS (分组集合)的概念,其中用户指定用于分组的键的集合。例如,键k”…,kn的“ Rollup”对应于GROUPING SETS((),(り,Qc1,k2),…,(k” k2,...,kn))在创建包括多维分组策略的构成分组之后,对结果进行联合并且作为整体来呈现。这是常规技术开始发生问题的地方,因为关系模型仅允许数据的表格表示。作为結果,ー个人面临过多的“NULL (空)”值,这些NULL值最终出现在由于分组和聚集的使用而不呈现数据的地方。这是不幸的,因为“Null”的含义不仅仅被用于表示该源中不再存在数据。以下示出一个示例SELECT Empld, Year, SUM(Sales)AS SalesFROM SalesGROUP BY ROLLUP (Empld, Year)
权利要求
1.一种便于数据聚集的方法,包括 利用被配置成执行存储在存储器中的计算机可执行指令的至少一个处理器来执行以下动作 基于键选择器在非关系数据源上执行分组集合运算符。
2.如权利要求1所述的方法,其特征在于,还包括基于所述分组集合运算符和所述键选择器来生成多维对象。
3.如权利要求2所述的方法,其特征在于,所述键选择器是函数。
4.如权利要求2所述的方法,其特征在于,所述多维对象包括基于至少一个键选择器或键选择器的组合来对数据进行分组的函数。
5.如权利要求4所述的方法,其特征在于,所述函数是“GroupBy”函数。
6.如权利要求5所述的方法,其特征在于,还包括 为所述分组集合运算符标识一定数量的分组; 为所标识数量的分组中的每一分组标识键选择器的组合;以及 基于所述分组数量以及对于与所述分组集合运算符对应的所述数量的分组中每一分组的键选择器组合,创建“GroupBy”函数。
7.如权利要求4所述的方法,其特征在于,还包括将类型插入所述函数,所述函数引用对所述数据进行分组的键选择器的组合。
8.如权利要求4所述的方法,其特征在于,还包括将嵌套结构注入所述多维对象,所述嵌套结构包括在所述非关系数据源上执行所述分组集合运算符的结果。
9.如权利要求8所述的方法,其特征在于,还包括基于所述嵌套结构使用附加键选择器来产生所述分组集合运算符的结果。
10.一种方便查询数据的系统,包括 耦合到存储器的处理器,所述处理器被配置成执行以下存储在所述存储器中的计算机可执行组件 第一组件,被配置成利用包括键选择器和分组集合运算符的多维对象,来在非关系数据源上执行所述分组集合运算符。
全文摘要
本发明公开了多维分组运算符。诸如语言集成查询(LINQ)对象之类的多维对象可基于分组集合运算符以及零个或多个键选择器而被生成。可利用该对象来在非关系数据源上查询。该对象可包括与同该分组集合运算符有关的每一分组对应的函数序列,以便提供多维分组表示。此外,该对象包括供优化执行该分组集合运算符的嵌套结构。
文档编号G06F17/30GK103020150SQ20121048005
公开日2013年4月3日 申请日期2012年11月22日 优先权日2011年11月22日
发明者B·德斯梅特, H·J·M·梅杰, J·W·戴尔 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1