当前位置:  开发笔记 > 编程语言 > 正文

任何Python OLAP/MDX ORM引擎?

如何解决《任何PythonOLAP/MDXORM引擎?》经验,为你挑选了1个好方法。

我是MDX/OLAP的新手,我想知道是否有任何类似于支持OLAP的类似于Django ORM for Python的ORM.

我是一个Python/Django开发人员,如果有一些东西可以与Django进行某种程度的集成,我会非常有兴趣了解它.



1> S.Lott..:

Django有一些即将发布的OLAP功能.

阅读http://www.eflorenzano.com/blog/post/secrets-django-orm/

http://doughellmann.com/2007/12/30/using-raw-sql-in-django.html,也

如果您首先拥有适当的星型模式设计,那么一维结果可以具有以下形式.

from myapp.models import SomeFact
from collections import defaultdict

facts = SomeFact.objects.filter( dimension1__attribute=this, dimension2__attribute=that )
myAggregates = defaultdict( int )
for row in facts:
    myAggregates[row.dimension3__attribute] += row.someMeasure

如果要创建二维摘要,则必须执行以下操作.

facts = SomeFact.objects.filter( dimension1__attribute=this, dimension2__attribute=that )
myAggregates = defaultdict( int )
for row in facts:
    key = ( row.dimension3__attribute, row.dimension4__attribute )
    myAggregates[key] += row.someMeasure

要计算多个SUM和COUNT以及什么不是,你必须做这样的事情.

class MyAgg( object ):
    def __init__( self ):
        self.count = 0
        self.thisSum= 0
        self.thatSum= 0

myAggregates= defaultdict( MyAgg )
for row in facts:
    myAggregates[row.dimension3__attr].count += 1
    myAggregates[row.dimension3__attr].thisSum += row.this
    myAggregates[row.dimension3__attr].thatSum += row.that

这 - 乍一看似乎效率低下.您正在浏览事实表,返回许多行,然后您将在应用程序中进行聚合.

在某些情况下,这可能比RDBMS的本机sum/group_by 更快.为什么?您使用的是简单的映射,而不是RDBMS通常必须使用的更复杂的基于排序的分组操作.是的,你得到了很多行; 但你得到的却少了.

这样做的缺点是它不像我们想的那样具有说服力.它的优点是它是纯Django ORM.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有