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

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Learn more

Reply
Syndicate_Admin
Administrator
Administrator

Convertir SQL en DAX

Estoy tratando de convertir el siguiente código SQL a DAX, no puedo obtener el mismo resultado que por SQL. ¿Podemos hacer esto en una sola medida o necesitamos dos medidas y luego restar?

Además, no puedo usar la función EXCEPTO en este caso

SELECT Count(DISTINCT( A.AccountNumber)) FROM factTable F
JOIN dimAccount A ON F.AccountKey = A.AccountKey y F.DateSk = A.DateSk
JOIN [dimDate] D on F.DateSk = D.DateSk
DONDE D.IsLastDayOfMonth = 1 y D.DateKey > '2020-11-30' y D.DateKey <= '2021-11-30'
e ISNULL(F.Sale ,0) = 0
y F.IsDeletetd = 'False'
y A.IsDeletetd = 'False'

y A.AccountNumber
NO EN(
SELECT DISTINCT(A.AccountNumber) FROM fact F
JOIN dimAccount A ON F.AccountKey = A.AccountKey y F.DateSk = A.DateSk
JOIN [dimDate] D on F.DateSk = D.DateSk
DONDE D.IsLastDayOfMonth = 1 y D.DateKey > '2020-11-30' y D.DateKey <= '2021-11-30'
e ISNULL(F.Sale ,0) > 0
y F.IsDeleted = 'False'
y A.Deleted = 'False'
)

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

¿Puede ayudarme a convertir el siguiente SQL en una consulta DAX, será de gran ayuda!

```

WITH course_lesson_counts AS (
SELECT
cl.course_id,
COUNT(cl.lesson_id) AS total_lessons
FROM course_lessons cl
JOIN lessons l ON cl.lesson_id = l.id
WHERE cl.publish_map_id IS NOT NULL AND l.publish_map_id IS NOT NULL
GROUP BY cl.course_id
),
halfway_users AS (
SELECT
ucp.course_id,
ucp.user_id,
COUNT(clp.lesson_id) AS completed_lessons
FROM user_course_progress ucp
JOIN course_lesson_progress clp ON ucp.user_id = clp.user_id AND ucp.course_id IN (
SELECT course_id FROM course_lesson_counts
)
WHERE clp.progress_status IN ('in_progress', 'completed')
GROUP BY ucp.course_id, ucp.user_id
)
SELECT
c.id AS course_id,
c.name AS course_name,
COUNT(DISTINCT hu.user_id) AS halfway_user_count
FROM courses c
JOIN course_lesson_counts clc ON c.id = clc.course_id
LEFT JOIN halfway_users hu ON c.id = hu.course_id AND hu.completed_lessons >= (clc.total_lessons / 2)
WHERE c.publish_map_id IS NOT NULL
AND c.paid_type = 'paid'
GROUP BY c.id, c.name;
Syndicate_Admin
Administrator
Administrator

Seleccione m.id, count(distinto a.id) total_calls
desde el momento m
unir moment_keywords k en k.moment_id = m.id
Unirse a moment_mapping MP en mp.moment_keyword_id = k.id
Unir transcripción t en t.id = mp.transcription_id
Unir audio A en a.id = t.audio_id
donde m.id = 215
Agrupar por m.id

¿Alguien puede ayudarme a convertir esto en DAX? Tengo un total de 5 mesas desde la mesa de momento hasta la mesa de audio y tiene relaciones de muchos a uno entre todas ellas.
Estoy buscando encontrar un recuento distinto de callids donde un solo momento id = 215 para una tarjeta visual.

Syndicate_Admin
Administrator
Administrator

@amikm ,

Para convertir el código SQL a DAX, puede probar el siguiente enfoque:

Reemplace las cláusulas FROM y JOIN con una función FILTER que filtre las filas de las tablas relevantes en función de las condiciones de la cláusula WHERE.

Reemplace las cláusulas SELECT y COUNT con una función CALCULATE que cuente los distintos valores AccountNumber mediante la función DISTINCTCOUNT.

Esta es la medida DAX resultante:

Recuento de números de cuenta distintos =

CALCULAR(

DISTINCTCOUNT(dimAccount[AccountNumber]),

FILTRO(

factTable,

factTable[DateSk] = dimDate[DateSk]

&& dimDate[IsLastDayOfMonth] = 1

&& dimDate[DateKey] > "2020-11-30"

&& dimDate[DateKey] <= "2021-11-30"

&& ISBLANK(factTable[Venta])

&& factTable[IsDeleted] = FALSE

&& dimAccount[IsDeleted] = FALSO

),

FILTRO(

dimAccount,

dimAccount[AccountKey] = factTable[AccountKey]

&& dimAccount[DateSk] = factTable[DateSk]

)

)

Esta medida debería darle el mismo resultado que la consulta SQL.

Nota: Reemplacé ISNULL(F.Sale ,0) = 0 con ISBLANK(factTable[Sale]) ya que DAX no tiene una función ISNULL. En DAX, puede usar la función ISBLANK para comprobar si un valor es NULL o una cadena vacía.

¡Espero que esto ayude! Avíseme si tiene alguna pregunta o si necesita más ayuda.

Saludos

Esteban Tao

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

Comparta algunos datos, describa la pregunta y muestre el resultado esperado.

Syndicate_Admin
Administrator
Administrator

¿Entiendo correctamente que le gustaría tener un recuento distinto de números de cuenta, donde no hubo venta al final de cada mes?

Para darle algún consejo, sería bueno que proporcionara información más detallada como: ¿están los datos de ventas en su tabla de datos por día (por lo que debe resumirlos al último día del mes)? ¿Cuál sería el contexto de su informe?

Creo que no sería fácil darle una sola respuesta... especialmente si creo que también el SQL no tiene demasiado sentido (por ejemplo, ¿Por qué necesita poner la última condición WHERE (A.AccountNumber NOT IN( ...) ?... ¿No es suficiente la condición ISNULL(F.Sale ,0) = 0?)

Helpful resources

Announcements
Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

October Power BI Update Carousel

Power BI Monthly Update - October 2025

Check out the October 2025 Power BI update to learn about new features.

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.