Power Builder - Calculos hacia arriba

 
Vista:

Calculos hacia arriba

Publicado por Badboy (16 intervenciones) el 15/06/2007 19:58:01
Buenas tardes foreros.... tengo una pequeña duda....

Les cuento, tengo un dw donde, por ejemplo, tengo 10 registros y dos de ellos son subtotales y un total...

sucede que deben ir organizados de la siguiente forma

descripcion padre consecutivo
Total 0
subtotal 1 0 1
dato1 1
dato2 1
dato3 1
subtotal 2 0 2
dato5 2
dato6 2

entonces, los datosX los obtengo de la base de datos y los subtotales se calculan con suma algebraica de los que deba, y el total a partir de los subtotales.... estan relacionados por dos campos, uno es un consecutivo y el otro me dice quien se calcula a partir de quien...

como puedo hacer para calcular estos subtotales "hacia arriba" en el DW... espero haberme explicado y que puedan ayudarme, gracias.....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Calculos hacia arriba

Publicado por Leopoldo Taylhardat (710 intervenciones) el 15/06/2007 22:52:25
Saludos...

Para empezar, te digo que para mi concepto tienes deficiencia del diseño de la BD... en una tabla de movimientos no debes tener registros de totales... (en mi opinión)...
En todo caso lo que puedes hacer es crear el DW, en el encabezado le colocas un campo calculado que te sume todos los registros, colocas un nivel de grupo donde vas a colocar en el 'Header' del grupo (no en el footer del subtotal) la sumatoria de los registros de grupo que te hacen el subtotal (otro campo calculado) y en el retrieve solo tomas en cuenta los registros de detalles (no el de subtotal ni el de total)...
Espero que te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calculos hacia arriba

Publicado por Badboy (16 intervenciones) el 18/06/2007 21:07:18
No leonardo, no me entendiste.... yo no estoy guardando totales en la base de datos....
Que tengo en la base de datos?? el esquema de la cuenta, es decir, concepto de la cuenta padre y sus respectivos hijos por supuesto relacionados con una recursividad en la tabla... el problema es colocar en un mismo DW que me obtenga el esquema, sacando de la base de datos a los registros de detalle y calculando los padres a partir de sus detalles, por supuesto tengo cuentas padres que se calculan a partir de otras cuentas padres que se calculan del detalle... es decir, tengo varios niveles de suma donde algunos totales son calculados a partir de varios totales....

EJEMPLO

P.1 Producción Bruta
P.11 Producción De Mercado
P.111 Producción Principal
P.1111 Producción Efectiva
P.1112 Producción Imputada
P.112 Producción Secundaria
P.12 Producción Para Uso Final Propio
P.13 Otra Producción No De Mercado
P.131 Otra Producción No De Mercado Para Uso Propio
P.132 Otra Producción No De Mercado Vendida

P.2 Consumo Intermedio
P.21 Bienes
P.22 Servicios

B.1b Valor Agregado Bruto/Producto Interno Bruto
K.1 Consumo De Capital Fijo
B.1n Valor Agregado Neto/Producto Interno Neto

si ves este esquema podemos observar por ejemplo, que la produccion principal se calcula a partir de la efectiva y la imputada, que la produccions para uso final propio es un detalle y que otra produccion no de mercado se calcula de sus dos detalles, y la produccion de mercado se calcula por la principal y la secundaria... con ellas donde dos son calculos y una es dato se calcula la produccion bruta...
este calculo en casacada es lo que no he conseguido desarrollar amigo leonardo, no se si podras ayudarme
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Calculos hacia arriba

Publicado por Leopoldo Taylhardat (710 intervenciones) el 19/06/2007 18:21:07
Saludos... No soy Leonardo sino Leopoldo..
Tienes para empezar cuatro (4) opciones...

1.- a nivel de PB., puedes crear el dw que te acumule a nivel de longitud del código... es decir extraes en el order (order by) el código del registro dependiente(hijo), que es de mayor longitud... es decir
P.1
P.11
P.111 etc....
y agrupas totales a nivel de grupo por la longitud del código en un campo calculado que tenga como expresión: lenght(código for group)...
P.111 (longitud 5) sería el grupo 3... y sumarizas para ese grupo
P.11 (longitud 4) sería el grupo 2... y sumarizas para ese grupo
P.1 (longitud 2) sería el grupo 1... y sumarizas para ese grupo
y hasta lo puedes poner invertido poniendo los totales de grupo en el Header del grupo en la presentación del DW.... (order by longitud DESC)
el dw tendría un campo calculado con IF anidado..
IF (len(longitud)=3,1,IF(len(longitud)=4,2),IF(len(longitud)=5,3)))
...

2. a nivel de base de datos... puedes crear FUNCIONES que te sumen a nivel de grupo (te devueven) el total... y te sacan solo el total obtenido en el dw...

3. creas una tabla temporal sumarizando los valores a través de un PROCEDURE de la BD...
4. Creas TRIGGERS a nivel de los registros de detalle y acumulan en una columna del grupo que corresponde supongamos el tres(3), y otro trigger que cuando acumules en el tres, acumules en la columna del dos(2) y el trigger del dos(2) que te acumule en el nivel uno(1)....

Eso es con un trigger del detalle con after insert, los demas (grupo 1, 2 y 3) serían after update (de la columna) ACUMULADO... (si es el nombre que le pones a la columna)....

Como ves... son varias las posibilidades...
Espero que te sirva...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar