cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Syndicate_Admin
Administrator
Administrator

Resultado incorrecto al dividir con medida

Hola a todos,

He ideado una función DAX que básicamente comprueba si algunas condiciones están satisfechos o no, si satisface la condición, entonces divide la columna con una medida dinámicamente cambiante (que es la multiplicación de no. días laborables en un mes con una constante).

Ahora si divido la columna con no. de días laborables en un mes con una constante, manualmente, me da la salida correcta, pero con la medida que cambia dinámicamente me da una salida incorrecta.

Mi colega revisó cada lógica y función que usé, nada está mal. Incluso para un valor pequeño como 1.3 estoy recibiendo 708.6. Todo funciona bien excepto la parte en la que estoy dividiendo con la medida.

No tengo idea de lo que está mal. Pensé que ustedes sabrían lo que está mal.

Gracias.

1 ACCEPTED SOLUTION

Hola @R_S-13697 ,

Así que el punto clave de esta cuestión es calcular los días laborables dinámicamente correcto?

Supongamos que tiene una tabla de fechas de calendario y la usa como segmentación de datos, ahora selecciono 2020 agosto, tal vez necesite una medida como esta:

Measure = 
var _workingdays = 
COUNTX(
    FILTER(
        ALLSELECTED('Calendar'),
        WEEKDAY('Calendar'[Date],2) <> 6 &&
        WEEKDAY('Calendar'[Date],2) <> 7
    ),
    'Calendar'[Date]
)
return
IF(
    SELECTEDVALUE('Table'[LSA]) = "LSA1" &&
    SELECTEDVALUE('Table'[Rate Type]) = "Onshore",
    CALCULATE(
        SUM('Table'[Hours Delivered]),
        FILTER(
            ALL('Table'),
            'Table'[LSA] = "LSA1" &&
            'Table'[Rate Type] = "Onshore"
        )
    ) / 
    (6.24 * _workingdays)
)

La variable de la fórmula cambiará cuando seleccione una fecha diferente en la segmentación de datos y el total cambiará dinámicamente al mismo tiempo.

En cuanto a [horas entregadas], supongo que se calculará en la condición específica, por ejemplo, total de LSA1 cuando la clase de tasa es onshore.

Adjunto mi archivo de muestra en el siguiente, espera ayudarle.

Por cierto, le sugiero que cree medidas en lugar de columnas calculadas como su fórmula anterior y el uso de la función switch() que tendría un mejor rendimiento.

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

7 REPLIES 7
daxer-almighty
Solution Sage
Solution Sage

Hola @R_S-13697

Cuando intenta calcular con una medida en una tabla de hechos fila por fila, debe conocer los detalles sobre el contexto de fila y cómo interactúa con las medidas (la llamada "transición de contexto"). Debido a que lo más probable es que no lo sepas (como puedo reunir de tus publicaciones), estás obteniendo resultados equivocados.

Por otro lado, el uso de una medida para calcular columnas en una tabla de hechos grande es un gran no-no. Nunca deberías hacerlo. Debido a la transición de contexto, el cálculo será muy lento (incluso puede lanzar un error fuera de mem, que ha sido el tema de bastantes publicaciones vistas en este foro). Además, las columnas calculadas se deben volver a mover a Power Query, ya que esta es la herramienta para la recopilación rápida de datos. DAX es para el análisis de datos. Peor aún, si lo hace en DAX (especialmente en grandes tablas de hechos) la compresión será extremadamente pobre y por lo tanto el modelo se hinchará, DAX será más lento de lo que podría ser.

De ahí mi consejo: por favor, mueva el cálculo a donde pertenece - Power Query - y estará agradecido de haberlo hecho.

Una última cosa... Hay una construcción mucho mejor en DAX para expresar su lógica: SWITCH. El IF es bueno cuando usted tiene como máximo 2 condiciones.

mahoneypat
Super User IV
Super User IV

Comparta su expresión DAX, junto con los datos de entrada de ejemplo y el resultado esperado. Puede usar variables para solucionar problemas para ver lo que se devuelve para la parte de recuento de días.

saludos

palmadita





Did I answer your question? Mark my post as a solution! Kudos are also appreciated!

To learn more about Power BI, follow me on Twitter or subscribe on YouTube.


@mahoneypa HoosierBI on YouTube


Hola @mahoneypat ,
La cuestión-
Datos disponibles -
La tabla de hechos tiene más de 70columnas y 200000rows fuera de las cuales la tabla que necesito crear en BI se concierta con sólo período de servicio, tipo de tarifa, LSA, tipo de trabajo, tipo de cargo y no. de horas delieverd.

Ejemplo-

LsaPeríodo de servicioTipo de tasaHoras DelieverdTipo de trabajoTipo de carga
LSA101-07-2014Onshore1Servicio de asistenciaFijo
LSA201-12-2015Onshore0.5ProyectoFijo
LSA301-06-2019Offshore2ProyectoVariable
LSA201-09-2020Onshore12MejoraVariable
LSA401-06-2019Offshore2MantenimientoFijo


Salida deseada-

Necesito crear una tabla que calcule el no. horas entregadas según el tipo de tarifa, el tipo de cargo, el tipo de trabajo en base al mes y el año y LSA.
Ejemplo: donde los datos cambian dinámicamente con mes y año

LsaFTE de tipo de tasa onshoreFTE de Tipo de Tasa OffshoreFTE de Tipo de Tasa MezcladaFTE para la mejora de la aplicaciónFTE de tipo de trabajo Variable
LSA125.377.87.10.04.9
LSA226.41.623.82.661.1
LSA34.00.968.60.00.0
LSA41.346.220.90.023.7

Ahora estos valores se calculan utilizando-
No. de horas de trabajo entregadas en un mes (con condiciones) divididas por el total no. de las horas de trabajo disponibles en un mes. que es diferente para diferentes LSA. Ejemplo-
Total de horas de trabajo en un mes, no. de las horas de trabajo en un día fijado pero diferente para Onshore y Offshore) * no. días laborables en un mes (cambia dinámicamente)
LSA1 (horas de trabajo en un mes para LSA1) a 6,24 * 21(131,04) O,
LSA2 (horas de trabajo en un mes para LSA2) a 6,52* 21(136,92)

Lo que se ha hecho hasta ahora-

Completamos la tabla y la lógica excepto la parte de cálculo final (valores incorrectos que obtuve).
DAX he creado -

FTE of Rate Type Onshore =
(
    IF (
        [Rate Type] == "Paid",
         (
            IF (
                [office] == "Farm",
                 [Hours delivered] / 157.08 ,
                 (
                    IF (
                        [office] == "Boult",
                        [Hours delivered] /127.68 ,
                         (
                            IF (
                                [office] == "Global",
                                [Hours delivered] / 136.92,
                                 (
                                    IF (
                                        [office] == "GOTS",
                                        [Hours delivered] / 131.04,
                                         (
                                            IF (
                                                [office] == "Daxnd",
                                                [Hours delivered] / 136.92,
                                                 (
                                                    IF (
                                                        [office] == "UK",
                                                        [Hours delivered] / 131.04,
                                                         (
                                                            IF (
                                                                [office] == "UTS",
                                                                [Hours delivered] / 131.04,
                                                                 (
                                                                    IF ( [office] == "ANZ", [Hours delivered] / 149.94, 0 )
)))))))))))))))))

131.04 (horas de trabajo en un mes) a 6,08 (horas laborables en un día) * 21 (agosto de 2020->21 días laborables)
Las horas de trabajo en un mes cambiarán dinámicamente con el mes.
Cosa en la que estoy atascado-
He ideado la lógica para calcular que no. de días laborables (una tabla de medida de hecho), usando la tabla de calendario, pero cuando la estoy usando para dividirla con una suma de horas profesionales entregadas. No produce una salida esperada.
El código que estoy usando se da arriba.
Todo está funcionando perfectamente bien, pero cuando estoy usando la medida para la división la salida producida es incorrecta.

Ayuda sería muy apreciado I'm atascado aquí para los últimos 2 días (sólo un principiante).
Gracias de antemano por ayudar.

Hola @R_S-13697 ,

Según su descripción, parece que no se sabe cómo calulado, por ejemplo LSA1, 6.08 es las horas de trabajo por día, 21 son los días laborables en agosto de 2014, pero el período de servicio de LSA1 que vi en sus datos de muestra es 2014/7/1. ¿Desea calcular el total de horas de los días laborables del mes siguiente o cualquier otra cosa?

¿Podría considerar compartir más detalles sobre este cálculo o un archivo de ejemplo simple basado en la imagen de datos y la salida esperada de la muestra para su posterior discusión? Podría ayudarnos a resolver mejor este problema.

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hey @v-yingjl
El conjunto de datos es demasiado grande por eso que usé 5 columnas como ejemplo.
El conjunto de datos tiene datos de enero de 2014 a septiembre de 2020 para todos y cada uno de los meses del año.

El período de serive sólo tiene la fecha de inicio de cada mes, independientemente de los datos (Ex- 1/1/14;1/2/14.........,1/9/20). El período de servicio solo se utiliza para informar qué mes y año se está utilizando. Pero necesitamos calcular el número total. días laborables en un mes determinado y multiplicarlo con horas de trabajo en un día para obtener el total de horas de trabajo en un mes.

Hola @R_S-13697 ,

Así que el punto clave de esta cuestión es calcular los días laborables dinámicamente correcto?

Supongamos que tiene una tabla de fechas de calendario y la usa como segmentación de datos, ahora selecciono 2020 agosto, tal vez necesite una medida como esta:

Measure = 
var _workingdays = 
COUNTX(
    FILTER(
        ALLSELECTED('Calendar'),
        WEEKDAY('Calendar'[Date],2) <> 6 &&
        WEEKDAY('Calendar'[Date],2) <> 7
    ),
    'Calendar'[Date]
)
return
IF(
    SELECTEDVALUE('Table'[LSA]) = "LSA1" &&
    SELECTEDVALUE('Table'[Rate Type]) = "Onshore",
    CALCULATE(
        SUM('Table'[Hours Delivered]),
        FILTER(
            ALL('Table'),
            'Table'[LSA] = "LSA1" &&
            'Table'[Rate Type] = "Onshore"
        )
    ) / 
    (6.24 * _workingdays)
)

La variable de la fórmula cambiará cuando seleccione una fecha diferente en la segmentación de datos y el total cambiará dinámicamente al mismo tiempo.

En cuanto a [horas entregadas], supongo que se calculará en la condición específica, por ejemplo, total de LSA1 cuando la clase de tasa es onshore.

Adjunto mi archivo de muestra en el siguiente, espera ayudarle.

Por cierto, le sugiero que cree medidas en lugar de columnas calculadas como su fórmula anterior y el uso de la función switch() que tendría un mejor rendimiento.

Saludos
Equipo de apoyo a la comunidad _ Yingjie Li
Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

@v-yingjl
He resuelto este problema con la ayuda de mi colega. Como sugeriste, usamos Medir en lugar de columnas y está funcionando bien excepto Totales .

También estoy comprobando su código si encaja lo aceptaré como solución. Muchas gracias por su ayuda.

P.S.- Voy a publicar el problema total en un nuevo hilo, si quieres echar un vistazo sólo hágamelo saber, te mencionaré allí.

Helpful resources

Announcements
PBI User Groups

Welcome to the User Group Public Preview

Check out new user group experience and if you are a leader please create your group

April Update

Check it Out!

Click here to read more about the April 2021 Updates!

MBAS Carousel

Sign up for our May 4th event!

May the fourth be with you, join us online!

secondImage

The largest Power BI virtual conference

100+ sessions, 100+ speakers, Product managers, MVPs, and experts. All about Power BI. Attend online or watch the recordings.