Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Don't miss out! 2025 Microsoft Fabric Community Conference, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount. Prices go up February 11th. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Necesita ayuda: Creación de una columna condicional para valores entre 0 en Power BI

He creado correctamente un cálculo de diferencia horaria en Power BI, pero estoy buscando agregar una columna condicional. Quiero que la nueva columna tenga si la suma entre ceros es menor que 1, el valor es 0. Si la suma entre ceros es mayor que 1, me gustaría que los valores siguieran siendo los mismos que los originales. Si el valor original es 0, el valor permanece como 0. ¿Cómo puedo lograrlo en Power BI?
por ejemplo

Bubufun_0-1701137937432.png

Igualmente

Bubufun_1-1701138099939.png

Este es el enlace de mi archivo https://drive.google.com/file/d/1mgo5Iusx_2AlaMxLo6QJ1on0PrgYAOqS/view?usp=sharing

4 REPLIES 4
Syndicate_Admin
Administrator
Administrator

¡Hola! @v-nuoc-msft
¡Gracias por su útil respuesta! Realmente resolvió el problema al que me enfrentaba.
¡Era exactamente lo que necesitaba para resolver mi problema!

Syndicate_Admin
Administrator
Administrator

@Bubufun

Aquí está mi solución para usted, puede crear una nueva implementación de columna en Power BI Desktop:

Usar Power Query, agregar una columna como valor de índice

vnuocmsft_0-1701241038975.png

Si el valor del índice es menor o igual que el valor del índice actual y temp es 0, se devuelve el valor máximo del índice

vnuocmsft_1-1701241038978.png

max_index = CALCULATE (
    max ('Table'[Index] ),
    FILTER('Table', 'Table'[Index] <=EARLIER('Table'[Index]) && 'Table'[temp] = 0)
)

Cuando temp es 0, devuelve 0 y group_index cuando no es igual a 0

vnuocmsft_2-1701241090087.png

group_index = IF([temp] = 0, 0, [max_index])

Suma temporal para el mismo valor de columna

vnuocmsft_3-1701241137261.png

temp_value = SUMX(FILTER('Table', 'Table'[group_index] = EARLIER('Table'[group_index])), [temp])

Determine si la suma de valores entre 0 es mayor que 1 y devuelva el valor requerido

vnuocmsft_4-1701241182800.png

result = IF([temp_value] = 0, 0, if([temp_value] < 1, 0, if([temp_value] > 1, [temp])))

Por último, puedes hacer un informe para mostrar el resultado

vnuocmsft_0-1701241557577.png

vnuocmsft_6-1701241243925.png

vnuocmsft_7-1701241243926.png

Saludos

Noveno Chen

Si esta publicación ayuda, considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

¡HOLA! @amitchandak

Pido disculpas por no expresarme con claridad. Algunas partes no eran precisas y había inexactitudes en los datos que proporcioné. Aquí hay un enlace a una versión más precisa.

En primer lugar, WorkHourTemp se utiliza para observar el proceso de funcionamiento de la máquina.

El proceso de determinación de WorkHourTemp:

"Fichaje de evento" significa que alguien detecta y enciende la máquina.
"Event clock-out" indica que alguien detecta y detiene la máquina.

En este proceso:

Si el 'fichaje' se produce antes del 'fichaje de salida', significa que alguien está operando la máquina. Si el sensor detecta un cambio de mv mayor que 1, calcula WorkHour, representando al personal que opera la máquina y realiza acciones específicas.

Si el 'reloj de salida' ocurre antes del 'reloj de entrada', implica que nadie opera la máquina. Incluso si el sensor detecta un cambio de mv, no se calculará la hora de trabajo.
Usando la Máquina 2 como ejemplo:
M2.png

Hay dos escenarios:

Primer escenario:
El marco de tiempo con cuadro azul para la máquina 2 comienza a las 12:02 a. m. del 23 de julio de 2023 y finaliza a las 12:12 a. m. del mismo día. Este período solo representa 0,17 horas, teóricamente considerado un período de prueba, ya que generalmente concluimos las pruebas de la máquina dentro de 1 hora.


Segundo escenario:
El marco de tiempo en el cuadro rojo para la máquina 2 comienza a las 10:24 a. m. y finaliza a las 12:10 p. m. del 23 de julio de 2023. Este período incluye un tiempo de funcionamiento real de 0,68 horas + 1,08 horas, claramente no es un período de prueba.

El cálculo de 0,68 y 1,08 surge de los cambios de mv detectados por el sensor. Por lo tanto, WorkHourTemp registra estas dos entradas de datos.

Actualmente, mi objetivo es excluir el período de prueba y calcular solo el tiempo real que el personal operó la máquina, eliminando así el primer escenario. En otras palabras, preferiría que no se incluyera el valor de 0,17 horas, conservando solo los valores de 0,68 horas + 1,08 horas para determinar el tiempo operativo real, excluyendo el período de prueba.

Revisando la máquina 1:
M1.png

Hay cuatro instancias en un recuadro rojo que indican que entre el "registro de entrada" y el "registro de salida", el personal utilizó la máquina para cuatro acciones específicas.

La suma de los tiempos dentro de estos cuadros rojos es evidentemente más de 1 hora, lo que significa períodos sin pruebas.

Sin embargo, la suma de tiempo dentro del área de caja azul de la máquina 1 no supera 1 hora. Por lo tanto, agradecería un método para excluir los valores dentro de los recuadros azules, manteniendo solo el tiempo total del personal operando la máquina para acciones específicas.

Nota adicional: Durante el período de prueba, el sensor registra un máximo de 15 entradas de datos en 1 hora.

Syndicate_Admin
Administrator
Administrator

@Bubufun , Suponiendo que WorkHourTemp es una medida, cree una medida como

AverageX(Summarize(Table, Table[Name], Table[UTC], Table[Event], "_1", Switch(True(), [WorkHourTemp]<1, 0,1 )), [_1])

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors