Promedios provenientes de campos calculados en Access

Tengo una base de datos para el departamento de Calidad y Control, en el cual se califican Llamadas, Sesiones (Google Meet) y Tickets (Zendesk), además de Capacitaciones y Auditorías. Toda la información se encuentra en una misma tabla llamada interacciones, en la cual incluí campos calculados para obtener las calificaciones de acuerdo a ponderaciones que son diferentes dependiendo de la interacción e incluso del departamento al que pertenece el agente que llevó las interacciones. De esta manera me aparece en la tabla "Interacciones" el nombre del agente, su area, el tipo de interacción, y su calificación real (campo calculado que considera lo anterior para determinar la calificación de acuerdo a ponderaciones si/no en la tabla, como: hizo un buen saludo si o no (vale 1 punto), etc. NECESITO una forma de calcular el promedio general de todas las interacciones por agente pero que no me redondee para arriba aquellas que tienen .5, esas deben redondearse hacia abajo. ¿Cómo podría programar eso en Access?

2 respuestas

Respuesta
2

Estoy de acuerdo los campos calculados son un dolor de cabeza, por ejemplo, al migrar a un servidor como PostgreSQL. Le complemento este ejemplo que utiliza una función que utilizo hace años y el autor es Dev Ashish y elaborado en el año 2000, para mi es la mejor para redondear.

TABLA

Con esta tabla diseño la consulta utilizando la función

DISEÑO CONSULTA

Le aclaro el contenido de los 2 últimos campos en donde llamo la función:

ResultadoBancario: Redondear([valor_01]/[valor_02];0;Verdadero)
ResultadoNoBancario: Redondear([valor_01]/[valor_02];0;Falso)

RESULTADO DE LA CONSULTA

Observe que en la primera fila la función deja 6.5 como 6 en redondeo bancario y 7 en no bancario.

FUNCIÓN

Guarde esta función en un módulo. No hay que inventar la rueda, ya existe.

 ' ********** Code Start **************
'This code was originally written by Dev Ashish
'It is not to be altered or distributed,
'except as part of an application.
'You are free to use it in any application,
'provided the copyright notice is left unchanged.
'
'Code Courtesy of
'Dev Ashish
'
Public Function Round( _
ByVal Number As Variant, NumDigits As Long, _
Optional UseBankersRounding As Boolean = False) As Double
'
' ---------------------------------------------------
' From "Visual Basic Language Developer's Handbook"
' by Ken Getz and Mike Gilbert
' Copyright 2000; Sybex, Inc. All rights reserved.
' ---------------------------------------------------
'
  Dim dblPower As Double
  Dim varTemp As Variant
  Dim intSgn As Integer
  If Not IsNumeric(Number) Then
    ' Raise an error indicating that
    ' you've supplied an invalid parameter.
    Err.Raise 5
  End If
  dblPower = 10 ^ NumDigits
  ' Is this a negative number, or not?
  ' intSgn will contain -1, 0, or 1.
  intSgn = Sgn(Number)
  Number = Abs(Number)
  ' Do the major calculation.
  varTemp = CDec(Number) * dblPower + 0.5
  ' Now round to nearest even, if necessary.
  If UseBankersRounding Then
    If Int(varTemp) = varTemp Then
      ' You could also use:
      ' varTemp = varTemp + (varTemp Mod 2 = 1)
      ' instead of the next If ...Then statement,
      ' but I hate counting on TRue == -1 in code.
      If varTemp Mod 2 = 1 Then
        varTemp = varTemp - 1
      End If
    End If
  End If
  ' Finish the calculation.
  Round = intSgn * Int(varTemp) / dblPower
End Function

Si quiere el ejemplo lo puede solicitar a [email protected] 

Respuesta
1

Víctor, soy totalmente enemigo de los campos calculados en las tablas. En el mismo momento que declaras un campo como calculado pierdes el control sobre él. Por otro lado opino que las tablas deben ser un simple recipiente de datos. Las operaciones que haya que hacer se hacen en los formularios cuando introduces los datos.

Dicho esto, si declaro un campo como calculado, en el ejemplo le llamado Redondeo, en TextoC me presenta el valor "real" de dividir TextoA por TextoB

En las tabla

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas