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

The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more

Reply
Anonymous
Not applicable

Consulta SQL a DAX

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

QueryResult.PNG

Gracias

10 REPLIES 10
Icey
Community Support
Community Support

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.

Anonymous
Not applicable

@Icey

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

Icey
Community Support
Community Support

Hola @skiper ,

Según mi prueba, la causa es que no hay registros que satisfagan las condiciones al mismo tiempo.

track.PNG

track1.PNGtrack2.PNG

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.

Anonymous
Not applicable

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.

Icey
Community Support
Community Support

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.

Anonymous
Not applicable

@Icey

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.?

Icey
Community Support
Community Support

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.

Anonymous
Not applicable

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:

ml MusicList: id, EpisodeId
mlr MusicListRow: MusicListId TrackID
td TrackData: Valor de versión de TrackID
e episodio: TablaTjansteId Datum StartTidUtc
p ProgramService: Nombre tablaTjansteId
Saludos
Icey
Greg_Deckler
Community Champion
Community Champion

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.



Follow on LinkedIn
@ me in replies or I'll lose your thread!!!
Instead of a Kudo, please vote for this idea
Become an expert!: Enterprise DNA
External Tools: MSHGQM
YouTube Channel!: Microsoft Hates Greg
Latest book!:
DAX For Humans

DAX is easy, CALCULATE makes DAX hard...

Helpful resources

Announcements
November Power BI Update Carousel

Power BI Monthly Update - November 2025

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

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!

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.

Top Kudoed Authors