Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
4 years ago
Solved

convertir SQL(case) a Dax

Hola chicos,

Tengo esta consulta en sql que estoy tratando de hacer una medida en powerbi pero tengo problemas,

Consulta SQL:

SELECCIONE COUNT (DISTINCT(ID)) -

COUNT( DISTINCT (caso cuando MONTH(ISNULL(ConvertedDate,Date_of_Last_Status_Change__c)) <> MONTH(TransactionDate) y Year(ISNULL(ConvertedDate,Date_of_Last_Status_Change__c)) <> YEAR(TransactionDate) y luego DocumentNumber end))

ESTRUCTURA DE LA TABLA

IDENTIFICACIÓNTransactionDateConvertedDateDate_of_Last_Status_Change__cNúmero de documento
12312/1/202112/1/202112/15/2021001

145

11/1/202112/1/202112/15/2021002
23410/1/20219/1/202110/21/2021003
265NULO10/1/202110/15/2021NULO
NULO2/1/2021NULONULO005

respuesta correcta:

4 - 2 = 2

¡Gracias por su ayuda!

  • Syndicate_Admin's avatar
    Syndicate_Admin
    4 years ago

    @sun-sboyanapall ¿Puedes probar esta medida?

    Measure =
    CALCULATE (
        DISTINCTCOUNT ( tbl[ID] ),
        VAR _base =
            FILTER (
                tbl,
                tbl[TransactionDate] <> BLANK ()
                    && tbl[ConvertedDate] <> BLANK ()
                    && tbl[Date_of_Last_Status_Change__c] <> BLANK ()
            )
        VAR _left =
            FILTER ( tbl, tbl[ID] <> BLANK () )
        VAR _join =
            EXCEPT (
                _left,
                FILTER (
                    _base,
                    MONTH ( COALESCE ( tbl[ConvertedDate], tbl[Date_of_Last_Status_Change__c] ) )
                        <> MONTH ( tbl[TransactionDate] )
                        && YEAR ( COALESCE ( tbl[ConvertedDate], tbl[Date_of_Last_Status_Change__c] ) )
                            <> YEAR ( tbl[TransactionDate] )
                )
            )
        RETURN
            _join
    )
    

8 Replies

  • @sun-sboyanapall No creo que la consulta SQL anterior devuelva 2 para los datos proporcionados, devuelve 4, porque la siguiente parte devuelve 0

    COUNT( DISTINCT (case when MONTH(ISNULL(ConvertedDate,Date_of_Last_Status_Change_c)) <> MONTH(TransactionDate) and Year(ISNULL(ConvertedDate,Date_of_Last_Status_Change_c)) <> YEAR(TransactionDate) then DocumentNumber end))

    desintegración

    MONTH(ISNULL(ConvertedDate,Date_of_Last_Status_Change_c)) <> MONTH(TransactionDate) 
    has two matches row 2 and row 3 as {12,11}, {9,10}
    
    Year(ISNULL(ConvertedDate,Date_of_Last_Status_Change_c)) <> YEAR(TransactionDate)
    has no match as all of them are {2021,2021}

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Eso es correcto, la respuesta correcta sería 4, pensé que he cambiado de año.

      Espero con ansias cómo harías esto con dax.


      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        @sun-sboyanapall ¿Puedes probar esta medida?

        Measure =
        CALCULATE (
            DISTINCTCOUNT ( tbl[ID] ),
            VAR _base =
                FILTER (
                    tbl,
                    tbl[TransactionDate] <> BLANK ()
                        && tbl[ConvertedDate] <> BLANK ()
                        && tbl[Date_of_Last_Status_Change__c] <> BLANK ()
                )
            VAR _left =
                FILTER ( tbl, tbl[ID] <> BLANK () )
            VAR _join =
                EXCEPT (
                    _left,
                    FILTER (
                        _base,
                        MONTH ( COALESCE ( tbl[ConvertedDate], tbl[Date_of_Last_Status_Change__c] ) )
                            <> MONTH ( tbl[TransactionDate] )
                            && YEAR ( COALESCE ( tbl[ConvertedDate], tbl[Date_of_Last_Status_Change__c] ) )
                                <> YEAR ( tbl[TransactionDate] )
                    )
                )
            RETURN
                _join
        )
        

  • Gracias, otra forma que hice fue crear una columna calculada, se consume que se está ocupando de mi declaración de caso.

    IsConsumed = 
    var yearTranDate = YEAR(Tbl[TransactionDate])
    var monthTranDate = MONTH(Tbl[TransactionDate])
    var yearConvDate = YEAR(Tbl[ConvertedDate]))
    var monthConvDate = MONTH(Tbl[ConvertedDate]))
    var yeardateLastSC = YEAR(Tbl[Date_of_Last_Status_Change__c]))
    var monthdateLastSC = MONTH(Tbl[Date_of_Last_Status_Change__c]))
    
    RETURN  IF(ISBLANK(vLeadConsumedWithSales[ID]), FALSE(), IF(ISBLANK(yearConvDate), yearDateLastSC <> yearTranDate && monthDateLastSC <> monthTranDate, yearConvDate <> yearTranDate && monthConvDate <> monthTranDate))