Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola a todos,
Estoy tratando de encontrar una manera de refactorizar esta medida para hacerla más eficiente, ya que actualmente es bastante lenta. He estado girando mis ruedas, así que cualquier ayuda es muy apreciada.
Necesitamos obtener valores distintos por empleado y fecha porque la tabla TLG también tiene un nivel de línea más granular, y los días laborables son solo para el empleado y la fecha trabajada.
La idea general aquí es que dos empleados diferentes pueden tener un día de trabajo diferente por fecha, porque uno podría estar en un país que tiene diferentes días festivos o fines de semana del otro. Así que con el fin de obtener el total real de días de trabajo para "Horas por día" denominadores, etc, necesito encontrar días de trabajo promedio para cada fecha.
EVALUATE
VAR DistinctEmpDays =
SUMMARIZE(
TLG
, TLG[Date Worked], TLG[Employee ID], TLG[Workday Days]
)
VAR AvgDays = /* Average workdays per single day */
GROUPBY(
DistinctEmpDays
, [Date Worked]
, "AvgWorkdays"
, AVERAGEX( CURRENTGROUP(), [Workday Days] )
)
VAR Total = /* Sum daily avg for total workdays */
SUMX( AvgDays, [AvgWorkdays] )
RETURN
ROW("Test", Total)
Hola @ryan25r9 ,
¿O así?
Measure =
VAR x =
AVERAGEX(
FILTER(
TLG,
TLG[Date Worked] = SELECTEDVALUE(TLG[Date Worked])
),
TLG[Workday Days]
)
RETURN
ROW(
"Test",
SUMX(
TLG,
x
)
)
Saludos
Lionel Chen
Si este post ayuda,entonces por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.
Lo siento, esto tampoco llega del todo. No tiene en cuenta que hay TLG duplicado[Días laborables] por fecha de trabajo y empleado.
Probablemente ayuda a dar un ejemplo. Conjunto de datos inicial:
ID del empleado | Fecha de trabajo | Días laborables | TLP ID |
491 | 01/05/20 | 0 | 10 |
491 | 01/06/20 | 0.5 | 4 |
491 | 01/06/20 | 0.5 | 941 |
491 | 01/07/20 | 1 | 331 |
491 | 01/08/20 | 1 | 596 |
491 | 01/08/20 | 1 | 2537 |
11402 | 01/06/20 | 1 | 319 |
11402 | 01/06/20 | 1 | 782 |
11402 | 01/07/20 | 1 | 331 |
11402 | 01/08/20 | 1 | 841 |
99821 | 01/05/20 | 0 | 10 |
99821 | 01/06/20 | 1 | 319 |
99821 | 01/07/20 | 1 | 2537 |
99821 | 01/07/20 | 1 | 596 |
99821 | 01/07/20 | 1 | 941 |
2729 | 01/05/20 | 1 | 331 |
2729 | 01/05/20 | 1 | 1931 |
2729 | 01/06/20 | 0.5 | 841 |
Valores distintos de ID de empleado, fecha de trabajo y días laborables:
ID del empleado | Fecha de trabajo | Días laborables |
491 | 01/05/20 | 0 |
491 | 01/06/20 | 0.5 |
491 | 01/07/20 | 1 |
491 | 01/08/20 | 1 |
11402 | 01/06/20 | 1 |
11402 | 01/07/20 | 1 |
11402 | 01/08/20 | 1 |
99821 | 01/05/20 | 0 |
99821 | 01/06/20 | 1 |
99821 | 01/07/20 | 1 |
2729 | 01/05/20 | 1 |
2729 | 01/06/20 | 0.5 |
PROMEDIO Días laborables por día:
Fecha de trabajo | Días promedio de día laborable |
01/05/20 | 0.333 |
01/06/20 | 0.750 |
01/07/20 | 1.000 |
01/08/20 | 1.000 |
Por último, la SUMA de los promedios, haciendo el resultado esperado de la medida aquí:
3.083 |
Hola
Puede descargar mi archivo PBI desde aquí.
Espero que esto ayude.
Apreciamos enormemente el archivo Power BI, muchas gracias. Esto realmente devuelve los resultados correctos, pero ejecutar en todo el modelo reduce la eficiencia de 25 segundos a 171 segundos. La tabla principal (TLG) es de 700 filas, por lo que ciertamente no está ayudando con la transición de contexto. Como referencia, se simplifica el código antiguo y se modifica el código recomendado para que se ejecute en DAX Studio:
EVALUATE
VAR Old =
SUMX(
GROUPBY(
SUMMARIZE(TLG, TLG[Date Worked], TLG[Employee ID], TLG[Workday Days])
, [Date Worked]
, "AvgWorkdays"
, AVERAGEX( CURRENTGROUP(), [Workday Days] )
)
, [AvgWorkdays]
)
VAR New =
SUMX (
VALUES ( 'TLG'[Date Worked] ),
AVERAGEX (
SUMMARIZE (
VALUES ( TLG[Employee ID] ),
[Employee ID],
"AvgWorkdays", CALCULATE(AVERAGE(TLG[Workday Days]))
),
[AvgWorkdays]
)
)
RETURN
ROW("test", New)
Gracias por proporcionar datos de muestra y salida. Esta medida debe funcionar para usted en una tabla con Fechas en las filas.
NewMeasure ?
VAR __summary
ADDCOLUMNS (
RESUMEN ( TLG, TLG[Employee ID], TLG[Date Worked] ),
"AvgHrs", CALCULATE ( AVERAGE ( TLG[Workday Days] )
)
devolución
AVERAGEX ( __summary, [AvgHrs] )
Si esto funciona para usted, por favor márquelo como solución. Los felicitaciones también son apreciados. Por favor, avísame si no.
saludos
palmadita
To learn more about Power BI, follow me on Twitter or subscribe on YouTube.
Apreciamos mucho la respuesta! Desafortunadamente, esta medida está en un modelo tabular SSAS, por lo que necesito que funcione en todos los contextos y no se puede limitar a una tabla con fechas en las filas.
Por favor, pruebe esta medida en su lugar.
NewMeasure á Sumx(Values(TLG[Date]), calculate(average(TLG[Workday Days])))
Si esto funciona para usted, por favor márquelo como la solución. Los felicitaciones también son apreciados. Por favor, avísame si no.
saludos
palmadita
To learn more about Power BI, follow me on Twitter or subscribe on YouTube.
Gracias, pero esto no funcionará. No cambia la granularidad a Empleado y Fecha trabajado, por lo que está agregando millones de duplicados.
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 |