Power Builder - Contar distintos en campo calculado

 
Vista:

Contar distintos en campo calculado

Publicado por Guillermo Rebaza Cotrina (2 intervenciones) el 20/05/2005 17:45:34
Hola amigos del foro, necesito de su ayuda, estoy queriendo contar en un campo calculado todas las respuestas que digan “SI”, nuestro buen amigo me indico que debiera hacerlo asi SUM(if campo = “SI”,1,0) for all), esto me funciono correctamente, ahora lo que necesito es lo siguiente, a continuación un ejemplo:

Familia Niño Capacitado
====== ===== =========
Familia1 Niño1 SI
Familia1 Niño2 SI
Familia2 Niño4 NO
Familia3 Niño5 SI
Familia3 Niño6 SI
Familia4 Niño7 NO
Familia4 Niño8 NO

Necesito saber cuantas familias han sido capacitadas pero las familias pueden tener varios niños, y la capacitación se da por familia y no por niño siendo así las familias capacitadas serian solo 2 y no 4 como aparece si contamos todos los “SI”, cree un DW Group pero igual me sige saliendo 4 capacitados siendo solo 2, muchas gracias por su ayuda.

Atentamente:

Guillermo Rebaza
Cajamarca - Perú
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

ojo

Publicado por Victor //:-) (116 intervenciones) el 20/05/2005 18:36:31
//SQL que familias estan capacitadas
select distinct familia,capacitada
from tutabla
where capacitada='SI'

Crea un DW Group con: CAPACITADA
pon un DW SORT con: CAPACITADA,FAMILIA
//PB COMPUTE cuantas familias estan capacitadas
Sum(if(capacitada = “SI”,1,0) for all DISTINCT capacitada)

atte
Victor //:-)
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:Contar distintos en campo calculado

Publicado por Oscar (1178 intervenciones) el 20/05/2005 20:15:57
Si no te importa filtrar los registros de tu DW, puedes realizar también lo siguiente:

1. En tu objeto DW, seguí empleando un campo calculado con la expresión:

SUM ( IF ( capacitado = 'SI', 1,0 ) for all )

2. Ahora en el evento open de tu ventana, filtraremos los registros que son distintos sin emplear SQL (que es otra alternativa).

dw_1.SetTransObject(sqlca)
dw_1.Retrieve()

//Primero ordenamos
dw_1.SetSort("familia")
dw_1.Sort()

//Filtramos los registros únicos
dw_1.SetFilter ("familia <> familia[-1] or GetRow () = 1")
dw_1.Filter()
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:Contar distintos en campo calculado

Publicado por Guillermo (52 intervenciones) el 26/05/2005 16:16:58
Hola Victor, Hola Oscar, como estan muchas gracias por su ayuda, recien revise lo que me indican en los dos post, ejecute lo que me indican, corrio correcto, ahora mi consulta si yo desearia que no me filtre sin el filtro, porque en si eso es lo que necesito, que me visualize en mi reporte la familia, con todos sus niños y que me cuente las capacitaciones por familia, espero quede claro y me puedan segir ayudando.
Atentamente:
Guillermo Rebaza Cotrina.
Cajamarca - Perú
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:Contar distintos en campo calculado

Publicado por Oscar (1178 intervenciones) el 29/05/2005 17:13:16
Para que te muestre las familias con todos sus niños, lo mejor que puedes hacer es crear un DW agrupado por el campo familia. ES l manera más calra de mostrar algo. No te conviene el DW grid.
Luego realizas lo siguiente:

1. En tu objeto DW, en la sección Detail pegas un compute_1, con la siguiente expresion:

if(getrow() = first( getrow() for group 1 ), 1, 0)

Nota: Este compute_1, sirve para asignar el número uno al primer registro de cada grupo, y lo otros registros quedan como cero.
Luego lo tornas invisible.

2. En tu mismo Objeto DW , en la sección Summary, pegas un compute_2, con la siguiente expresión:

cumulativesum(compute_1)

Nota: Este compute_2, suma o cuenta todos tus familias (grupos).

3. Ahora en ventana donde está tu control DW, pegas dos botones:
* Botón: Mostrar el número de familias capacitadas con todos sus hijos:

dw_1.SetFilter("capacitado='SI' ")
dw_1.Filter()

dw_1.Modify("compute_1.Expression='if(getrow() = first( getrow() for group 1 ), 1, 0) ' ")
dw_1.Modify("compute_2.Expression='cumulativesum(compute_1)' ")

* Botón: Mostrar el número de familias no capacitadas con todos sus hijos:
(Es el mismo script, donde sólo cambias el SI por el NO).
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