Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more
Hola a todos
Estoy intentando transformar la consulta SQL en lenguaje DAX, pero no puedo hacerlo. Por favor, mire la consulta y ayúdeme con el DAX
************
SELECT CAST(CAST(Songs.SwedishCount AS DECIMAL) / CAST(Songs.TotalCount AS DECIMAL) * 100 AS DECIMAL(5,2)) AS 'Percent swedish songs played',
CAST(CAST(Songs.ForeignCount AS DECIMAL) / CAST(Songs.TotalCount AS DECIMAL) * 100 AS DECIMAL(5,2)) AS 'Percent foreign songs played'
De
( SELECT SUM(CASE WHEN td.[ Valor] - 'Ja' O td. [Valor] - 'SE' ENTONCES 1 ELSE 0 END) COMO SwedishCount,
SUM(CASE WHEN td.[ Valor] <> 'Ja' AND td. [Valor] <> 'SE' Then 1 ELSE 0 END) AS ForeignCount,
COUNT(*) AS TotalCount
DESDE MusicList ml
Unirse a MusicListRow mlr
EN ml.id mlr. MusicListId
UNIRSE a TrackData td
EN mlr. TrackId a td. Trackid
DONDE td. [Nombre] IN ('Gramark.Svensk', 'GramarkLive.Svensk', 'Musikbank.Swedish')
Y ml. EpisodeId IN (
SELECT e.id
DESDE el episodio e
UNIRSE a ProgramService P ON E.TablaTjansteId-P.TablaTjansteId
DONDE p.[Nombre] á 'P3'
Y e.Datum entre '2020-03-09' Y '2020-03-15'
Y CAST(DATEADD(HOUR, 1, e.StartTidUtc) AS TIME) > á '06:00' -- DATEADD para utc a local en marzo
Y CAST(DATEADD(HOUR, 1, e.SlutTidUtc) AS DATE) - CAST(DATEADD(HOUR, 1, e.StartTidUtc) AS DATE) -- Tiene que ser el mismo día
)
Y td. [Versión] IN ( -- Obtener la versión más alta
SELECT MAX(td2.[ Versión])
DESDE TrackData td2
DONDE td2. TrackId a td. Trackid
)
) COMO Canciones
*****************************************************
THere son cinco tablas que se unen (Episodio, TrackData, ProgramService, MusicList, MusicListRow)
estos se unen con ID's entre sí. Resutlt en SQL se ve así como
Gracias
Hola @skiper ,
Por favor, compruebe:
Percent foreign songs played =
VAR maxversion =
CALCULATE ( MAX ( 'TrackData'[Version] ) )
VAR p =
CALCULATETABLE (
DISTINCT ( 'Episode'[Id] ),
FILTER (
'Episode',
'Episode'[TablaTjansteId]
IN CALCULATETABLE (
DISTINCT ( 'ProgramService'[TablaTjansteId] ),
'ProgramService'[Name] = "P3"
)
&& 'Episode'[Datum] >= DATE ( 2020, 3, 9 )
&& 'Episode'[Datum] <= DATE ( 2020, 3, 16 )
&& HOUR ( [StartTidUtc] ) >= 5
&& ROUNDDOWN ( 'Episode'[SlutTidUtc], 0 ) = ROUNDDOWN ( 'Episode'[StartTidUtc], 0 )
)
)
VAR tid =
CALCULATETABLE (
DISTINCT ( 'MusicListRow'[TrackId] ),
FILTER (
'MusicListRow',
'MusicListRow'[MusicListId]
IN CALCULATETABLE (
DISTINCT ( 'MusicList'[Id] ),
FILTER ( MusicList, 'MusicList'[EpisodeId] IN p )
)
)
)
VAR td =
FILTER (
'TrackData',
'TrackData'[TrackId] IN p
&& 'TrackData'[Version] = maxversion
&& 'TrackData'[Value] IN { "Ja", "SE" }
&& 'TrackData'[Name]
IN { "Gramark.Svensk", "GramarkLive.Svensk", "Musikbank.Swedish" }
)
RETURN
COUNTROWS ( FILTER ( td, NOT ( 'TrackData'[Value] IN { "Ja", "SE" } ) ) )
/ COUNTROWS ( td )
Percent swedish songs played =
VAR maxversion =
CALCULATE ( MAX ( 'TrackData'[Version] ) )
VAR p =
CALCULATETABLE (
DISTINCT ( 'Episode'[Id] ),
FILTER (
'Episode',
'Episode'[TablaTjansteId]
IN CALCULATETABLE (
DISTINCT ( 'ProgramService'[TablaTjansteId] ),
'ProgramService'[Name] = "P3"
)
&& 'Episode'[Datum] >= DATE ( 2020, 3, 9 )
&& 'Episode'[Datum] <= DATE ( 2020, 3, 16 )
&& HOUR ( [StartTidUtc] ) >= 5
&& ROUNDDOWN ( 'Episode'[SlutTidUtc], 0 ) = ROUNDDOWN ( 'Episode'[StartTidUtc], 0 )
)
)
VAR tid =
CALCULATETABLE (
DISTINCT ( 'MusicListRow'[TrackId] ),
FILTER (
'MusicListRow',
'MusicListRow'[MusicListId]
IN CALCULATETABLE (
DISTINCT ( 'MusicList'[Id] ),
FILTER ( MusicList, 'MusicList'[EpisodeId] IN p )
)
)
)
VAR td =
FILTER (
'TrackData',
'TrackData'[TrackId] IN p
&& 'TrackData'[Version] = maxversion
&& 'TrackData'[Value] IN { "Ja", "SE" }
&& 'TrackData'[Name]
IN { "Gramark.Svensk", "GramarkLive.Svensk", "Musikbank.Swedish" }
)
RETURN
COUNTROWS ( FILTER ( td, 'TrackData'[Value] IN { "Ja", "SE" } ) )
/ COUNTROWS ( td )
Saludos
Icey
Si este postAyuda, entonces por favor considereAcéptelo como la soluciónpara ayudar a los otros miembros a encontrarlo más rápidamente.
Muchas gracias por su ayuda. Lo intenté, pero me da Blank. Corrí diferentes variables por separado y se ejecuta, pero en su conjunto da un resultado en blanco.
He agregado una columna Name que faltaba en la tabla "TrackData". y subió un nuevo archivo que enlace está aquí
https://1drv.ms/u/s!AgrolwBG08XGjRgvhU_hIj17ZMwI?e=stn4Y1
También he creado dos columnas de la última parte de la consulta que es
TrackData'[Valor] IN á "Ja", "SE"
Pero soy capaz de resolver sólo la mitad de la consulta con este método. Puedes intentarlo si puedes. o seguiré trabajando en esto con la ayuda de su consulta..
Gracias
Hola @skiper ,
Según mi prueba, la causa es que no hay registros que satisfagan las condiciones al mismo tiempo.
Saludos
Icey
Si este postAyuda, entonces por favor considereAcéptelo como la soluciónpara ayudar a los otros miembros a encontrarlo más rápidamente.
Muchas gracias por doble cheque
Voy a tratar de cargar más filas para comprobar si hay registro, porque hay más de 2 millones de registros y sólo cargué medio millón,
¿Puede sugerirme cómo pensar así como lo hizo en su solución. ? Proceso de pensamiento ? porque no era capaz de pensar así
cualquier curso o sugerenciapara mejorar la forma de pensar en cómo crear DAX a partir de consultaSQL.
Hola @skiper ,
Siento responder tarde.
Es necesario comprender la lógica de cálculo de la consulta SQL en primer lugar. Además, algunas funciones DAX son necesarias para entender. A continuación, conviértalo en DAX según la lógica de cálculo.
En DAX, "VAR" almacena el resultado de una expresión como una variable con nombre, que luego se puede pasar como argumento a otras expresiones de medida.
Referencia: DAX: Utilice variables para mejorar sus fórmulas.
Por favor, hágamelo saber si las expresiones anteriores funcionan.
Saludos
Icey
Si este post ayuda,por favor considere aceptarlo como la solución para ayudar a otros miembros a encontrarlo más rápidamente.
Está bien con retraso, ya que estoy trabajando otro proyecto lado a lado. De todos modos, probé su solución por separado como cada parte de DAX largo y funciona, pero cuando ejecuto todo el código me da en blanco . El código SQL que se ejecuta en el servidor SQL proporciona datos, no puedo saber en este punto por qué no me está dando datos.
Traté de eliminar la restricción de fecha en VAR P **&& 'Episodio'[Datum] > FECHA ( 2020; 3; 9 )
** && 'Episodio'[Datum] <- FECHA ( 2020; 3; 16 )
pero el resultado fue el mismo BLANK. Incluso aumento la carga de datos a 1m filas, ¿cuál crees que es el problema.?
Hola @skiper ,
Aquí hay varios mensajes sobre la transformación de SQL a DAX. Espero que te ayuden.
O, puede compartir algunos datos de muestra ficticios, eliminando información confidencial, para su prueba. Puede cargar el archivo en OneDrive para la empresa y pegar el vínculo aquí.
Saludo,
Icey
Si este postAyuda, entonces por favor considereAcéptelo como la soluciónpara ayudar a los otros miembros a encontrarlo más rápidamente.
Hola @Icey
aquí está el enlace de mi archivo PBI.
He probado diferentes tablas y medidas, se puede eliminar todo extra para empezar desde el principio.
Saludos
No @skiper ,
Por favor, cree algunos datos ficticios, no datos reales,basados en los siguientes campos:
Por favor, consulte este post sobre cómo obtener su pregunta respondida rápidamente: https://community.powerbi.com/t5/Community-Blog/How-to-Get-Your-Question-Answered-Quickly/ba-p/38490, con especial atención a la sección sobre la publicación de SQL y pedir el equivalente de DAX.
Check out the November 2025 Power BI update to learn about new features.
Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!