Forum Discussion
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
Gracias
10 Replies
- Greg_DecklerCommunity 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.
- IceyCommunity 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.
- AnonymousNot 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
- Syndicate_AdminAdministrator
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 tablaTjansteIdSaludosIcey
- IceyCommunity 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.
- AnonymousNot applicable
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