Django tiene algunas características OLAP que están a punto de publicarse.
Leer http://www.eflorenzano.com/blog/post/secrets-django-orm/
http://doughellmann.com/2007/12/30/using-raw-sql-in-django.html, también
Si usted tiene un diseño adecuado esquema en estrella, en primer lugar, a continuación, los resultados de una dimensión pueden tener la siguiente forma.
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
Si desea crear un resumen bidimensional, debe hacer algo como lo siguiente.
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
Para calcular múltiples SUM's y COUNT's y lo que no, tienes que hacer algo como esto.
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
Esto - a primera vista - parece ineficaz. Estás revisando la tabla de hechos y devolviendo muchas filas que luego agregas en tu aplicación.
En algunos casos, esto puede ser más rápido que la suma/grupo_by nativa del RDBMS. ¿Por qué? Está utilizando un mapeo simple, no la operación de agrupamiento por orden más compleja que el RDBMS a menudo tiene que usar para esto. Sí, estás recibiendo muchas filas; pero estás haciendo menos para obtenerlos.
Esto tiene la desventaja de que no es tan declarativo como nos gustaría. Tiene la ventaja de que es puro Django ORM.
Me pregunto cómo se actualizaría esto para aprovechar el reciente soporte incluido de Djangos a múltiples bases de datos: http://docs.djangoproject.com/en/dev/topics/db/multi-db/ – fccoelho