Какие-либо механизмы OLAP/MDX ORM Python?

Похоже, по какой-то причине свойство extrude для этого здания равно false. Попробуйте изменить фильтр для слоя с экструдированием зданий:

'filter': ['==', 'extrude', 'true']

// =>

'filter': ['>', 'height', 0]
7
задан Bartosz Ptaszynski 22 January 2009 в 13:56
поделиться

3 ответа

У 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

Для вычислений нескольких СУММА и КОЛИЧЕСТВО и этажерка необходимо сделать что-то вроде этого.

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.

6
ответ дан 7 December 2019 в 05:30
поделиться

У меня была аналогичная потребность - не в полномасштабной ORM, а в простом хранилище данных типа OLAP на Python. После тщательного поиска существующих инструментов я написал этот небольшой прием:

https://github.com/kpwebb/python-cube/blob/master/src/cube.py

Даже если это не решит ваша точная потребность, это может быть хорошей отправной точкой для написания чего-то более сложного.

0
ответ дан 7 December 2019 в 05:30
поделиться

То же, что и kpw , я пишу свои собственные материалы, за исключением того, что они предназначены исключительно для Django:

https://code.google.com/p/ django-cube /

1
ответ дан 7 December 2019 в 05:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: