Calcular promedio de promedios

Un usuario Pregunto ✅

tsf

Quiero obtener el promedio de una serie de promedios, pero no puedo calcularlo. Aquí están mis datos:

DAX_AverageProblem.png

El valor encerrado en un círculo de 132,05 es el promedio del total de transacciones / total de trabajadores (2509/19 = 132,05). Pero en cambio, necesito el promedio de los valores Promedio / Día * diario *. En otras palabras, debería ser 29,52. ¿Cómo voy a conseguir eso? Gracias.

(Por cierto, me doy cuenta de que 19 aparece como el número total de trabajadores a pesar de que cada día muestra solo 17. En este punto, sospecho que se debe a que los trabajadores cada día no son siempre los mismos y, por lo tanto, el recuento total distinto de trabajadores en todo el país. 5 días son en realidad 19.)

austinsense

Ésta es una gran pregunta, basada en lo que está diciendo, necesitará 1) calcular el promedio de cada día y 2) luego promediar esos promedios. En el futuro, será útil si comparte su DAX en su pregunta.

Para hacer esto, necesita usar la función AVERAGEX.

  • El primer argumento es una tabla que iterará sobre todas las filas; en su caso, desea una tabla de todos los días. Si tiene una tabla que ya tiene una fila para cada día, úsela; de lo contrario, puede usar la función VALORES para asegurarse de obtener solo una fila para cada día.
  • El segundo argumento es la expresión que desea calcular para cada fila de la tabla; en su caso, el número promedio de transacciones para ese día. Para el segundo argumento, es posible que deba usar CALCULATE dependiendo de la expresión.
El resultado final de la función es el promedio del resultado de cada fila. Esta es la forma en que funcionan todas las funciones «X»: SUMX, AVERAGEX, STDEVX, etc.

picazón

La función AvergageX debería darle lo que necesita, algo como

AverageX (valores (nombre de la tabla[colname]),[Average/Day Measure])

picazón

La función AvergageX debería darle lo que necesita, algo como

AverageX (valores (nombre de la tabla[colname]),[Average/Day Measure])

tsf

En respuesta a picazón

Gracias a los dos. Muy útil. La función VALORES fue la clave, ya que ya había estado probando la función AVERAGEX sin éxito. Había visto (y probablemente incluso usado) la función de valores antes, pero no he pasado suficiente tiempo familiarizándome con todas las funciones de DAX.

Greggyb

En respuesta a tsf

El promedio de promedios suele ser la forma incorrecta de abordar este tipo de problema. Prefiero tomar [Transactions] / [Worker-Days] para el promedio de nivel superior.

Imaginemos los siguientes datos de muestra:

Día | Trabajadores | Transacciones | Día normal

1 | 1 | 10 | 10

2 | 2 | 40 | 20

El promedio de los promedios es (10 + 20) / 2 = 15. Transacciones / Días-trabajador es (10 + 40) / 3 = 16.7. Aquí tenemos 3 trabajadores. 2 de ellos pueden procesar 20 transacciones / día. 1 de ellos solo puede hacer 10 al día. El trabajador de 10 días es el valor atípico aquí.

Imagina agregar una tercera fila:

Día | Trabajadores | Transacciones | Día normal

1 | 1 | 10 | 10

2 | 2 | 40 | 20

3 | 5 | 105 | 21

Promedio de promedios: (10 + 20 + 21) / 3 = 17

Transacciones / día-trabajador: (10 + 40 + 105) / (1 + 2 + 5) = 19,4

Aquí, está claro que el trabajador típico obtiene ~ 20 transacciones / día, pero el método de promedio subestima la productividad promedio en> 10%.

El promedio de promedios exagera el impacto de los valores atípicos.

Para obtener transacciones durante los días laborables, simplemente puede reemplazar su [Average/Day] la medida:

// DAX
// Measure

Worker-Days =
COUNTROWS(
    SUMMARIZE(
        'FactTransaction'
        ,'FactTransaction'[WorkerKey]
        ,'FactTransaction'[Date]
    )
)

Average/Day = 
DIVIDE( [Transactions], [Worker-Days] )

SUMMARIZE () agrupa por los campos nombrados, navegando por las relaciones de la tabla base identificada en el primer argumento. Así, nos brinda una tabla formada por las combinaciones únicas de trabajadores y días. Cuando un solo día está en contexto (una de sus filas de detalles de la muestra en su publicación original), este será el mismo que el número distinto de trabajadores en ese día. [Average/Day] por tanto, es el mismo para el nivel de detalle.

En el nivel total, usamos el numerador y denominador apropiados y obtenemos un resultado mucho más preciso.

austinsense

Ésta es una gran pregunta, basada en lo que está diciendo, necesitará 1) calcular el promedio de cada día y 2) luego promediar esos promedios. En el futuro, será útil si comparte su DAX en su pregunta.

Para hacer esto, necesita usar la función AVERAGEX.

  • El primer argumento es una tabla que iterará sobre todas las filas; en su caso, desea una tabla de todos los días. Si tiene una tabla que ya tiene una fila para cada día, úsela; de lo contrario, puede usar la función VALORES para asegurarse de obtener solo una fila para cada día.
  • El segundo argumento es la expresión que desea calcular para cada fila de la tabla; en su caso, el número promedio de transacciones para ese día. Para el segundo argumento, es posible que deba usar CALCULATE dependiendo de la expresión.
El resultado final de la función es el promedio del resultado de cada fila. Esta es la forma en que funcionan todas las funciones «X»: SUMX, AVERAGEX, STDEVX, etc.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *