Join us for an expert-led overview of the tools and concepts you'll need to pass exam PL-300. The first session starts on June 11th. See you there!
Get registeredPower BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.
Hola equipo,
Tengo la siguiente tabla:
Aquí quiero averiguar si la puerta está abierta durante más de 1 hora o no.
La columna Estado muestra si la puerta está abierta o no.
La columna CreatedOn muestra la duración del tiempo.
¿Podría ayudarme a crear una lógica de dax para lograr esto?
Para su información, archivo PFA aquí B&M.pbix
¡Gracias de antemano!
@marcorusso @Greg_Deckler @tharunkumarRTK @v-Linyulu-MSFT @Ahmedx
Depende de sus necesidades. Si ve valores en otros estados, también debe crearlos, pero una fila durante toda la duración del estado.
Hola @marcorusso señor,
Este hilo está desordenado.
Abriré una nueva consulta para obtener más aclaraciones cerrando esta.
¡Gracias por adelantado!
Hola @marcorusso señor,
¡Gracias por su rápida respuesta!
Solo para confirmar, cuando dices 'solo una fila durante toda la duración del estado'.
¿Algún pequeño ejemplo que me puedas dar para que lo entienda y lo lleve adelante?
Porque, los datos que tengo contienen una fila por cada 15 minutos que indica abierto/cerrado.
¡Gracias de antemano!
@sivarajan21 - Use el DAX a continuación en una medida, le dará un 1 si la puerta ha estado abierta durante 1 hora o más, y un 0 si no.
Simplemente reemplace 'Tabla' con el nombre de su mesa.
VAR _Table =
CALCULATETABLE (
ADDCOLUMNS (
'Table',
"Time Diff", DATEDIFF ( SELECTEDVALUE ( 'Table'[CreatedOn] ), NOW (), HOUR )
),
FILTER ( VALUES ( 'Table'[Status] ), 'Table'[Status] = "Open" )
)
RETURN
IF ( SUMX ( FILTER ( _Table, [Time Diff] > 1 ), 1 ) = 1, 1, 0 )
Si respondí a tu pregunta, marca mi publicación como la solución, ¡ayuda a otros con el mismo desafío a encontrar la respuesta!
@sivarajan21 - Dado que tienes kudo, lo acepto, ¿has probado mi sugerencia y funciona? Vea a continuación para mostrar que funciona para mí (verifique el reloj en la parte inferior derecha para verificar la hora):
Si respondí a tu pregunta, marca mi publicación como la solución, ¡ayuda a otros con el mismo desafío a encontrar la respuesta!
Hola @mark_endicott ,
Su solución no funciona con los datos que tengo:
Ahora, he creado una columna y un dax calculados para averiguar si está abierto durante más de 1 hora. Pero no estoy seguro de si son correctos o no.
Por favor, ayuda
PFA aquí B&M.pbix
@marcorusso gracias por su solución. Me aseguraré de implementar la lógica (esta columna calculada: 'Más de 1 hora') en mi flujo de datos o SQL. Pero quiero asegurarme de que devuelvan los resultados correctos
¡Gracias de antemano!
@sivarajan21 - no funciona porque ha usado mi DAX en una columna calculada, especifiqué que debe poner esto en una medida. Tendría que hacer esto para que maneje dinámicamente NOW() que proporciona la fecha y hora actual. Las columnas calculadas tienen un contexto diferente al de las medidas y son estáticas hasta que se actualiza el modelo, por lo que el tiempo en NOW() se almacenaría en el momento de la actualización de la tabla. Esto evitaría que su cálculo sea dinámico y potencialmente proporcionaría respuestas falsas cuando cambie la hora.
Esto también sería un problema si tuvieras que precalcular la duración usando getdate() a nivel de base de datos.
Por favor, utilice una medida para mi DAX, luego verá que funciona.
Hola @mark_endicott ,
¡Buenos días!
He usado su medida en dax y no en columnas calculadas. Captura de pantalla de PFA a continuación
Además, no funciona.
Además, el requisito es usar Prev Createdon date - Current Createdon date para encontrar datediff y no la función current time (NOW()). Disculpas por no ser específico.
¡Gracias de antemano!
@sivarajan21 - No me has dicho por qué no funciona. Su captura de pantalla no muestra ningún error y no puedo ver una imagen para ver que no funciona. Si no necesita usar NOW(), entonces su medida DAX solo necesita cambiarse a lo siguiente:
VAR _Table =
CALCULATETABLE (
ADDCOLUMNS (
'Door',
"Time Diff", DATEDIFF ( SELECTEDVALUE ( 'Door'[Prev CreatedOn] ), SELECTEDVALUE ( 'Table'[CreatedOn] ), HOUR )
),
FILTER ( VALUES ( 'Door'[Status] ), 'Door'[Status] = "Open" )
)
RETURN
IF ( SUMX ( FILTER ( _Table, [Time Diff] > 1 ), 1 ) = 1, 1, 0 )
Hola @mark_endicott
¡Disculparse! Gracias por su rápida respuesta
Probaré esto y volveré😊
¡Gracias de antemano!
Hola @mark_endicott ,
¡Gracias por su rápida respuesta!
Dame un poco de tiempo para casos de pruebas de diferencias y me pondré en contacto contigo😊
Gracias de antemano
Hola @sivarajan21
Puede crear una columna calculada en Power BI mediante DAX para determinar si la puerta ha estado abierta durante más de 1 hora.
Esto calcula la diferencia de tiempo en horas entre CreatedOn y UpdatedOn.
Ahora, crea otra columna calculada para comprobar si la duración supera 1 hora:
La sugerencia es no usar DAX para este cálculo. Puede precalcular la duración máxima del estado abierto mediante el preprocesamiento de sus datos (SQL, Power Query, Spark, cualquier otra cosa...). El uso de DAX no tiene mucho sentido porque el rendimiento disminuirá rápidamente cuando intente calcular el mismo cálculo en cada informe a través de una medida.
El 25 de febrero, encontrará un artículo en www.sqlbi.com, que analiza un escenario algo similar. Incluso si va a encontrar transformaciones en DAX (mediante tablas calculadas, no medidas), la sugerencia es preparar los datos por adelantado con un modelo de datos adecuado si tiene millones de filas o más.
Hola @marcorusso ,
¡Gracias por su rápida respuesta!
Cuando dices, ¿el 25 de febrero es 2024 o 2025?
Además, estoy interesado en este artículo ya que tengo miles de millones de filas para mis datos.
¡Por favor, aconséjenos!
Si es posible, reenvíe el artículo.
¡Gracias de antemano!