Calcular promedio de diferentes campos

Tengo cuatro campos numéricos (psf1, psf2, psf3 y psf4) en la tabla Pco1 de los que debo calcular el promedio. El problema es que alguno puede no tener ningún valor. ¿Si utilizo NZ y lo divido por 4 me da un valor erroneo ya que si un campo no tiene ningún valor habría que dividirlo por 3. Hay alguna función que pueda usar?.

1 Respuesta

Respuesta
1

No dices como lo quieres ni, lo que es más importante, como lo quieres.

Vamos a suponer que tienes una tabla como

Vamos a suponer que quieres verlo en una consulta. Primero, construye una como

y luego haz una como

Con lo que te quedará como

Le he puesto que tenga decimales, porque algún cálculo los necesitará.

Otra forma, suponiendo que en la tabla haya un campo Promedio. Y con ella hayas hecho un formulario, puedes poner, por ejemplo, en el evento Al recibir el enfoque del cuadro de texto Promedio

Promedio = (Nz([A]) + Nz([B]) + Nz([C]) + Nz([D])) / (DCount("*", "tabla1", "A is not null and cliente='" & Me.Cliente & "'") + DCount("*", "tabla1", "b is not null and cliente='" & Me.Cliente & "'") + DCount("*", "tabla1", "c is not null and cliente='" & Me.Cliente & "'") + DCount("*", "tabla1", "d is not null and cliente='" & Me.Cliente & "'"))

La ventaja del código es que te guarda el valor en la tabla por si lo necesitaras en algún momento.

muchas gracias por tu respuesta. Probé con el código y me devuelve error: "no coinciden los tipos de datos en la expresión de criterios"

Cuando una variable es numérica se escribe, si está al final de la instrucción

=" & me.nunfactura & ""

Cuando es texto, suponiendo que numfactura sea texto

='" & me.numfactura & "'"

Es decir abre apostrofe comillas & y cierra & comillas apostrofe comillas

Cuando una variable es de tipo fecha

=#" & mefechafactura & "#"

Si están en medio de una instrucción las ultimas comillas no hay que `ponerlas Por ejemplo

= '" & me.nombrecliente & "' and numfactura=" & me.numfactura & " and Fecha=#" & me,fechafactura & "#" aquí como es la última se cierra con unas comillas.

bueno.  Volví a probar de diferentes maneras. Este código me funcionó: 

PROM4 = (Nz([psf4A]) + Nz([psf4B]) + Nz([psf4C]) + Nz([psf4D])) / (DCount("[psf4A]", "PCO1", "[psf4A]is not null") + DCount("[psf4B]", "PCO1", "[psf4B]is not null") + DCount("[psf4C]", "PCO1", "[psf4C]is not null") + DCount("[psf4D]", "PCO1", "[psf4D]is not null"))

pero a pesar de que la sumatoria da 195, me devuelve el valor: 1,27. NO tengo ni idea de donde sale......

Gracias por tu valiosa ayuda

Si quieres, repito, si quieres, mándame un mensaje(solo el mensaje) a [email protected] y te mando un ejemplo. Si lo haces, en el asunto del mensaje pon tu alias Chicha dedatos, ya que si no sé quien me escribe ni los abro.

 Muchas gracias por tu ayuda

al final lo resolví con: PROM4 = (Sgn(Nz([psf4A], 0)) + Sgn(Nz([psf4B], 0)) + Sgn(Nz([psf4C], 0)) + Sgn(Nz([psf4D], 0)))

Hola

Creí que lo había resuelto pero tengo un problema:

1. Los campos con valor cero cuentan como cualquier otro valor y este código no me los cuenta
2. Hay campos con valor NULL que son los que no deben considerarse

¿Alguna idea?

Ya te dije el código que yo había puesto y cuando mando algo, como previamente lo he probado, se que funcionaba. Al quitarle tú el indicador de registro, que en este caso caso era Cliente, estás dividiendo la suma de A+B+C+D de un registro por TODOS los campos que tengan valor DEL FORMULARIO, le estas diciendo que cuente todos los registros en que a no sea nulo( que son todos los cuadros de texto en que a no es nulo), no los de un registro en particular más los de B, etc

Vuelvo a repetir

Hago un formulario tabular y en el evento al recibir el enfoque del cuadro de texto Promedio le digo lo del código que te puse en la otra respuesta, cambiando Cliente por Id.

Si compruebas verás que la suma es 160, que dividido por 3

Me voy al siguiente

Que suman 180 que dividido por 3... En el siguiente

Que 180 dividido por 4...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas