cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
pshetty05
Helper I
Helper I

Convertir consulta SQL en expresión DAX

Hola gente,

Espero que te vaya bien.

¿Puede alguien ayudarme a convertir esta consulta SQL en expresión DAX?

SQL - Caso CUANDO ((CLIENT_STATUS ' 'SH' O PARTICIPANT_STATUS NO ES NULL) Y (TRUNC(LAD_EMAIL_OPEN) > SYSDATE -371)) O
(CLIENT_STATUS <> 'SH' Y PARTICIPANT_STATUS ES NULL Y (TRUNC(LAD_EMAIL_OPEN) > SYSDATE -186)) ENTONCES 'PASO' ELSE 'FALLO' FIN COMO QUALITY_CHECK

Aunque he podido trabajar en el no null mediante el uso de NOT(ISBLANK), pero truncate y fecha funciones están donde estoy mirando.

1 ACCEPTED SOLUTION
amitchandak
Super User IV
Super User IV

@pshetty05 , Pruebe una nueva columna como


QUALITY_CHECK de la casa de los
interruptor ( true(),
(([CLIENT_STATUS] á "SH" á not(isblank([PARTICIPANT_STATUS]))) && ([LAD_EMAIL_OPEN].date > today() -371))
([CLIENT_STATUS] <> "SH" && isblank([PARTICIPANT_STATUS]) && ([LAD_EMAIL_OPEN].date > today() -186)) ,
'PASS' , 'FAIL' )



Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
Dashboard of My Blogs !! YouTube Channel !! Connect on Linkedin

Proud to be a Super User!

View solution in original post

7 REPLIES 7
AllisonKennedy
Super User III
Super User III

@pshetty05

Como ya ha sugerido @Greg_Deckler, podría obtener mejores respuestas si describe lo que está tratando de lograr, ya que no todos en este foro están bien versados en SQL y DAX, por lo que los expertos de DAX pueden incluso ser capaces de encontrar una manera más eficiente de resolver que sólo una traducción directa.

No soy fuerte en Oracle, pero siempre dispuesto a estirar mi cerebro, así que aquí está mi mejor intento de una traducción directa.

Esto parece una sola instrucción case, por lo que podría usar una función IF() aquí en lugar de SWITCH, pero no conozco sus requisitos completos y SWITCH es el equivalente DAX más cercano a CASE, IF() sería el DAX para IIF en SQL, así que me he mantenido fiel a su código SQL aquí.

¿Tampoco entiendo completamente sus requisitos de fecha y por qué necesita truncar? ¿Puede utilizar el valor de fecha y hora completo y cambiar el número de días que resta de él? También puede querer/necesitar utilizar la función NOW() en su lugar o incluso puede ser capaz de simplificar esto aún más, por lo que si puede explicar el razonamiento podemos proporcionar un mejor soporte.

COMPROBACIÓN DE LA CALIDAD DE LA CALIDAD DE LA CALIDAD
Interruptor (
Verdad (),
(
(
tabla[CLIENT_STATUS] "SH"
|| No ( ISBLANK ( tabla[PARTICIPANT_STATUS] ) )
)
&& (
Fecha ( año ( tabla[LAD_EMAIL_OPEN] ), Mes ( tabla[LAD_EMAIL_OPEN] ), Día ( tabla[LAD_EMAIL_OPEN] ) )
> Hoy () - 371
)
)
|| (
tabla[CLIENT_STATUS] <> "SH"
&& ISBLANK ( tabla[PARTICIPANT_STATUS] )
&& (
Fecha ( año ( tabla[LAD_EMAIL_OPEN] ), Mes ( tabla[LAD_EMAIL_OPEN] ), Día ( tabla[LAD_EMAIL_OPEN] ) )
> Hoy () - 186
)
), "PASO",
"FALLO"
)



Has this post solved your problem? Please mark it as a solution so that others can find it quickly and to let the community know your problem has been solved. 


If you found this post helpful, please give Kudos. ?


I work as a trainer and consultant for Microsoft 365, specialising in Power BI and Power Query. 


www.excelwithallison.com

@AllisonKennedy ¡Gracias! Esta lógica también sirve a mi propósito. Tendré presente que es más preciso al publicar una nueva pregunta 🙂

amitchandak
Super User IV
Super User IV

@pshetty05 , Pruebe una nueva columna como


QUALITY_CHECK de la casa de los
interruptor ( true(),
(([CLIENT_STATUS] á "SH" á not(isblank([PARTICIPANT_STATUS]))) && ([LAD_EMAIL_OPEN].date > today() -371))
([CLIENT_STATUS] <> "SH" && isblank([PARTICIPANT_STATUS]) && ([LAD_EMAIL_OPEN].date > today() -186)) ,
'PASS' , 'FAIL' )



Did I answer your question? Mark my post as a solution! Appreciate your Kudos!!
Dashboard of My Blogs !! YouTube Channel !! Connect on Linkedin

Proud to be a Super User!

View solution in original post

@amitchandak Lo probé de la misma manera, pero mediante el uso de IF

IF(((Core_Universe[INDV_CLIENT_STATUS] á "SH" NOT(ISBLANK(Core_Universe[PARTICIPANT_STATUS])) && (Core_Universe[LAD_EMAIL_OPEN].[ Fecha]>Hoy()-371))
(Core_Universe[INDV_CLIENT_STATUS] <> "SH" && ISBLANK(Core_Universe[PARTICIPANT_STATUS]) && (Core_Universe[LAD_EMAIL_OPEN].[ Fecha]>Today()-186))), "PASS", "FAIL")
Gracias 🙂
Greg_Deckler
Super User IV
Super User IV

@pshetty05: generalmente funcionan mejor si publica una muestra de los datos y la salida esperada. Por lo general, es probable que desee una instrucción SWITCH(TRUE()...) en DAX o una instrucción if then else en Power Query. TRUNC es una sentencia de Oracle que devuelve algún tipo de fecha, ¿correcto??

No es realmente suficiente información para seguir adelante, por favor primero compruebe si su problema es un problema común enumerado aquí: https://community.powerbi.com/t5/Community-Blog/Before-You-Post-Read-This/ba-p/1116882

Además, consulte este post sobre cómo obtener respuesta a su pregunta rápidamente: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490

Las partes más importantes son:
1. Datos de muestra como texto, utilice la herramienta de tabla en la barra de edición
2. Salida esperada de los datos de muestra
3. Explicación en palabras de cómo obtener de 1. a 2.


---------------------------------------

@ me in replies or I'll lose your thread!!!

I have a NEW book! 
DAX Cookbook from Packt
Over 120 DAX Recipes!




Did I answer your question? Mark my post as a solution!

Proud to be a Super User!




Hola @Greg_Deckler Gracias por compartir los enlaces, sería muy útil!

En cuanto a mi problema, la función Trunc se utiliza para truncar la hora y conservar la fecha.

Tengo una columna LAD_EMAIL_OPEN que tiene fecha y hora, así que estoy buscando una función similar a TRUNC() en oracle.

También quiero comprobar si esta fecha es dentro de 371 días. Por lo tanto, he utilizado SYSDATE - 371 es mayor que LAD_EMAIL_OPEN donde SYSDATE es la fecha/fecha actual del sistema.

Resto de la consulta, puedo administrar - Es sólo la parte de fecha donde estoy atascado.

¡Espero que eso lo aclare!

Puede utilizar la función FORMAT() en dax para convertir la fecha en texto y truncar. Podrías usar el nombre de columna. [fecha] o puede utilizar las funciones de parte de fecha Year, MONTH, DAY.

Todavía no entiendo por qué es necesario truncar el tiempo de esta columna, pero supongo que no necesito entender eso.

También puede agregar esta columna truncada en Power Query, en la pestaña Agregar columna de la cinta de opciones, hay algunos botones muy útiles para obtener información de fecha, hora, hora, etc. de fechas.


Has this post solved your problem? Please mark it as a solution so that others can find it quickly and to let the community know your problem has been solved. 


If you found this post helpful, please give Kudos. ?


I work as a trainer and consultant for Microsoft 365, specialising in Power BI and Power Query. 


www.excelwithallison.com

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!

MBAS on Demand

Microsoft Business Applications Summit sessions

On-demand access to all the great content presented by the product teams and community members! #MSBizAppsSummit #CommunityRocks

MBAS Attendee Badge

Claim Your Badge & Digital Swag!

Check out how to claim yours today!

Top Kudoed Authors