Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
2 years ago

Conversión de SQL Query a DAX

Eh

Tengo esta tabla en Power BI (IdsSemHistorico)

SELECT P.Id
FROM Pessoas P
WHERE NOT EXISTS (
    SELECT 1
    FROM Pessoas_Historico PH
    WHERE PH.IdPessoa = P.Id
        AND PH.Ativo IS NOT NULL
    )

y luego necesito una medida en DAX que me dé algunos cálculos. La consulta SQL es la siguiente:

SELECT COUNT(*)
FROM Pessoas P
LEFT JOIN IdsSemHistorico I ON P.Id = I.Id
WHERE ISNULL(P.DataAdmissao, P.StampData) <= @MonthStart
    AND ISNULL(P.DataRescisao, @MonthEnd) <= @MonthEnd
    AND (
        (I.Id IS NOT NULL AND P.activo = 'S')
        OR (
            I.Id IS NULL
            AND ISNULL((
                    SELECT TOP 1 PH.Ativo
                    FROM Pessoas_Historico PH
                    WHERE PH.IdPessoa = P.Id
                        AND PH.DataInicioGrupo <= @MonthStart
                        AND PH.Ativo IS NOT NULL
                    ORDER BY PH.DataInicioGrupo DESC
                    ), 1) = 1
            )
        )

¿Alguien puede ayudarme a transformar esta segunda consulta en una expresión DAX?

1 Reply

  • Si bien no recomiendo este enfoque, aquí está mi intento:

    EmployeeCount =
    VAR MonthStart = DATEVALUE("YYYY-MM-DD") -- Replace with your @MonthStart logic
    VAR MonthEnd = DATEVALUE("YYYY-MM-DD") -- Replace with your @MonthEnd logic
    RETURN
    CALCULATE(
    COUNTROWS(Pessoas),
    FILTER(
    Pessoas,
    ISBLANK(Pessoas.DataAdmissao) || Pessoas.DataAdmissao <= MonthStart
    ),
    FILTER(
    Pessoas,
    ISBLANK(Pessoas.DataRescisao) || Pessoas.DataRescisao <= MonthEnd
    ),
    FILTER(
    Pessoas,
    Pessoas.Activo = "S"
    || (NOT(ISBLANK(Pessoas.Id)) &&
    CALCULATE(
    COUNTROWS(Pessoas_Historico),
    FILTER(
    Pessoas_Historico,
    Pessoas_Historico.IdPessoa = Pessoas.Id
    && Pessoas_Historico.DataInicioGrupo <= MonthStart
    && NOT(ISBLANK(Pessoas_Historico.Ativo))
    ),
    ALL(Pessoas_Historico),
    TOPN(
    1,
    FILTER(
    Pessoas_Historico,
    Pessoas_Historico.IdPessoa = Pessoas.Id
    && Pessoas_Historico.DataInicioGrupo <= MonthStart
    && NOT(ISBLANK(Pessoas_Historico.Ativo))
    ),
    Pessoas_Historico.DataInicioGrupo,
    DESC
    )
    ) > 0
    )
    )
    )