[RESUELTO] Rendimiento en suma matricial multicriterio

Discute sobre la aplicación de hojas de cálculo
Responder
antonioares
Mensajes: 24
Registrado: Sab Ago 21, 2010 10:25 pm

[RESUELTO] Rendimiento en suma matricial multicriterio

Mensaje por antonioares »

Hola a todos.

Tengo un documento Calc con varias hojas funcionando como tablas de BBDD que contienen unas 2.000 filas. Estoy usando unas fórmulas de suma matricial con varios criterios (que he aprendido de este foro, así que gracias) y estoy teniendo problemas con el rendimiento. No se si podríais ayudarme para mejorar el rendimiento, quizás haciendo lo mismo pero de otra manera o con otra fórmula.

La fórmula es como la siguiente (la verdadera utiliza mas criterios):

Código: Seleccionar todo

{=SUMA( (OtraHoja.A2:A1000=EstaHoja.A2) * (OtraHoja.B2:B1000=EstaHoja.B2) * ( (OtraHoja.C2:C1000="Un valor") + (OtraHoja.C2:C1000="Otro valor") ) * (OtraHoja.D2:D1000) ) }
Es decir: Agrúpame las columnas A, B y C de OtraHoja de tal forma que la celda A de OtraHoja coincida con la celda A de EstaHoja, lo mismo pero con la celda B y que la celda C de OtraHoja o bien sea "Un valor" u "Otro valor", y para las coincidencias ve sumando sobre el valor de la celda D de OtraHoja.

Estoy usando la multiplicación como Y lógico y la suma como O lógico.

Estas son mis preguntas:

1. ¿Existe alguna manera de hacer esto mas sencillo y con menos cálculos? Aun no termino de entender como funciona BDSUMA y no se si serviría en este caso, y creo que SUMA.PRODUCTO hace exactamente lo mismo que lo que ya tengo.

2. Para la condición lógica O que necesito inicialmente pensé en un operador de conjunto "CONTENIDO EN" o "PERTENECE" para escribir algo como (utilizo una sintaxis figurada) "OtraHoja.C2:C1000 CONTENIDO EN {"Un valor", "Otro Valor"}: pero no he encontrado en Calc un operador de conjunto, o una forma de definir conjuntos literalmente o una función que me pueda servir en mi fórmula. He intentado usar búsqueda con funciones de texto pero como las funciones dan un código de error si la cadena no es encontrada al final la fórmula en su conjunto no funciona bien.

Agradecería mucho si alguien puede decirme el modo de hacer esto de forma mas fina y menos pesada.

Gracias por vuestro tiempo y saludos.
Antonio.
Última edición por antonioares el Mié Sep 15, 2010 9:15 am, editado 3 veces en total.
OpenOffice 3.2.1 en Ubuntu 10.04
antonioares
Mensajes: 24
Registrado: Sab Ago 21, 2010 10:25 pm

Re: Mejorar rendimiento en suma con varios criterios

Mensaje por antonioares »

He probado con SUMA.PRODUCTO y no hay cambios en el rendimiento. Voy a ver si consigo aprender BDSUMA y lo probaré.

Quizás ayudaría lo que mencionaba del operador de pertenencia a conjunto.
OpenOffice 3.2.1 en Ubuntu 10.04
antonioares
Mensajes: 24
Registrado: Sab Ago 21, 2010 10:25 pm

Re: Mejorar rendimiento en suma matricial con varios criteri

Mensaje por antonioares »

No he conseguido replicar la fórmula con BDSUMA de acuerdo a mis necesidades así que de momento me tendré que quedar con esta fórmula hasta que encuentre otra solución.
OpenOffice 3.2.1 en Ubuntu 10.04
mriosv
Mensajes: 2366
Registrado: Sab Dic 27, 2008 1:12 am
Ubicación: Galiza (España)

Re: Mejorar rendimiento en suma matricial con varios criteri

Mensaje por mriosv »

En 3.2 las funciones matriciales permiten utilizar la función SI(), no se si ello te podría ayudar a reducir el número de iteraciones, anidando SI().
Puedes usar "Subir adjunto" en Respuesta rápida - Editor Completo - Pestaña Subir adjunto
Apache OpenOffice 4, LibreOffice (Win10x64)
antonioares
Mensajes: 24
Registrado: Sab Ago 21, 2010 10:25 pm

Re: Mejorar rendimiento en suma matricial con varios criteri

Mensaje por antonioares »

Lo he resuelto consolidando los múltiples criterios en uno y utilizando un simple SUMAR.SI.

Siguiendo el ejemplo dado:

1. He conseguido cambiar mi modelo de datos para evitar el O LÓGICO implementado como una suma. Ya no tengo que comprobar varios valores en la columna OtraHoja.C. Esto se hace en ambas hojas.
2. He consolidado todas las columnas (incluyendo la C) de criterio en una sola columna, mediante una concatenación textual, de modo que resulta en una clave única. Ahora tengo un único criterio en la columna OtraHoja.E. Esto se hace en ambas hojas.
3. Prescindo de fórmula matricial y utilizo solamente un SUMAR.SI.

Quedaría mas o menos así:
=SUMAR.SI(OtraHoja.E2:E1000 ; EstaHoja.E2 ; INDIRECTO(OtraHoja.D2:D1000))
El rendimiento ha mejorado considerablemente ya que tenía muchas columnas con este caso, con muchos mas criterios y con una enorme cantidad de referencias cruzadas, como media docena de 6 hojas con cientos de registros cada una de ellas.

Espero que a alguien le sirva de ayuda.

Gracias por la lectura y las respuesta.

Saludos.
OpenOffice 3.2.1 en Ubuntu 10.04
Responder