Imprimir página | Cerrar ventana

Función personal en consulta

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85275
Fecha de impresión: 29/Marzo/2024 a las 09:58


Tema: Función personal en consulta
Publicado por: JOchoa
Asunto: Función personal en consulta
Fecha de publicación: 14/Mayo/2020 a las 23:06
Buenas tardes Maestros.
Mi duda es la siguiente:
Tengo en una herramienta de registro de calificaciones una función para el cálculo del promedio de tres notas:

Public Function PromedioNotas(Nota1P, Nota2P, Nota3P)
    If (Abs(IsNumeric(Nota1P)) + Abs(IsNumeric(Nota2P)) + Abs(IsNumeric(Nota3P))) = 0 Then
        PromedioNotas = Null
    Else
        PromedioNotas = Round((Nz(Nota1P, 0) + Nz(Nota2P, 0) + Nz(Nota3P, 0)) / (Abs(IsNumeric(Nota1P)) + Abs(IsNumeric(Nota2P)) + Abs(IsNumeric(Nota3P))), 4)
    End If
End Function

He creado una consulta de totales para el calculo del promedio de las tres calificaciones en donde incluyo dicha función en un campo calculado agrupado por estudiante : (esta consulta es base para varios reportes)

PromedioCalificaciones: Promedio(PromedioNotas([Nota1P];[Nota2P];[Nota3P]))

Aunque el cálculo lo hace bien noto que la consulta se demora en ejecutarse mas de 20 segundos pero si quito el campo calculado sólo demora fracciones de segundo.

Intenté quitar este campo calculado de la consulta y en lugar de él poner un campo calculado (independiente) en el reporte pero el problema que se me presenta es que como el promedio es un campo calculado independiente pues no podría hacer ordenamientos por este campo.

¿Qué estoy haciendo mal?  

Muchas gracias por su apoyo!

un abrazo desde Colombia



-------------
Jochoa



Respuestas:
Publicado por: mounir
Fecha de publicación: 15/Mayo/2020 a las 10:36
Hola!

No me queda claro lo que pretendes!
Cuantos promedios quieres hacer?. La función en sí te lo hace, entonces por qué vuelves a hacerlo?. Además no hace falta crear ninguna función para tal fin ya que en consulta agrupada ya te lo calcula sin problemas.

-------------
Un Saludo.


Publicado por: JOchoa
Fecha de publicación: 15/Mayo/2020 a las 13:42
Maestro Mounir, gracias por responder.

Creo que me faltó ser mas claro en mi consulta y trataré de serlo esta vez: El promedio de las notas que deseo calcular es un promedio entre tres campos diferentes de una tabla y no de datos en el mismo campo. Por eso es que utilizo la función personal PromedioNotas. Pero, adicional, debo calcular el promedio de ese promedioNotas y para eso si uso la agrupación por promedio de la consulta. Como puede ver, el uso de la función personal es debido a que no siempre están los tres datos de cada estudiante, es decir, a veces el promedio se debe calcular para una nota o para dos notas  o para tres notas.
Espero haberme hecho entender un poco mejor. Quedo atento a sus comentarios

un abrazo!



-------------
Jochoa


Publicado por: JOchoa
Fecha de publicación: 06/Julio/2020 a las 17:32
Maestros, he resuelto mi problema de esta manera: 
He dejado la funcion personalizada PromedioNotas en los reportes donde la necesito, es decir, se usa a demanda del usuario y la saqué de la consulta pues se estaba demorando mucho.

El hilo puede cerrarse

Muchas gracias

john O


-------------
Jochoa



Imprimir página | Cerrar ventana