Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
5 years ago
Solved

Conversión de SQL a DAX

Hola expertos, Quiero convertir sql por debajo de una consulta DAX. El 'cnt AS bucket' de SQL resaltado en la consulta da el resultado como 2 buckets. La consulta DAX cuenta todo en 1 bucket en lugar de 2. Mi recuento de cubos 2 está en blanco. ¿Puede alguien depurar mi DAX para encontrar el problema? Tengo una selección de rebanadora de mes y año en mi informe y las selecciones son de junio de 2020.

SQL-

SELECT cnt AS bucket,
hpc_busn_in_src,
Count(outlet_id) Ot_Cnt
FROM (SELECCIONAR outlet_id,
hpc_busn_in_src,
Count([deregister_dt]) Cnt
DE [PRNTO_V2]. [vw_fct_prnto_outlet_dergtn] WITH (nolock)
WHERE outlet_id IN (outlet_id SELECT
DE [PRNTO_V2]. [vw_fct_prnto_outlet_dergtn] con
(
nolock)
WHERE [deregister_dt] NO ES NULL
Y deregister_flg = 'Y'
Y [deregister_dt] ENTRE
'2021-06-01' Y '2021-06-30'
)
Y [deregister_dt] NO ES NULL
Y deregister_flg = 'Y'
Y [deregister_dt]<= '2021-06-30'
GRUPO POR outlet_id,
hpc_busn_in_src) T
GRUPO POR CNT,
hpc_busn_in_src

DAX measure1 para el bucket 1:

CALCULATE(COUNTROWS(FILTER(SUMMARIZE(FILTER(ALL('Outlet Deregistration'), ('Outlet Deregistration'[Deregister_Dt])<=MAX('Date'[FullDate]) && ('Outlet Deregistration'[Deregister_Dt])<>BLANK()), 'Outlet Deregistration'[Outlet_Id], "DeregisteredTime", CALCULATE(COUNT('Outlet Deregistration'[Deregister_Dt]), 'Outlet Deregistration'[Deregister_Flg]="Y", DatesBetween('Date'[FullDate], Date(2021,06,01), Date(2021,06,30) ), 'Outlet Deregistration'[HPC_Busn _In_Src]="HPC") ), [DeregisteredTime]=1))

DAX measure2 para bucket >=2-
CALCULATE(COUNTROWS(FILTER(SUMMARIZE(FILTER(ALL('Outlet Deregistration'), ('Outlet Deregistration'[Deregister_Dt])<=MAX('Date'[FullDate]) && ('Outlet Deregistration'[Deregister_Dt])<>BLANK()), 'Outlet Deregistration'[Outlet_Id], "DeregisteredTime", CALCULATE(COUNT('Outlet Deregistration'[Deregister_Dt]), 'Outlet Deregistration'[Deregister_Flg]="Y", DatesBetween('Date'[FullDate], Date(2021,06,01), Date(2021,06,30) ), 'Outlet Deregistration'[HPC_Busn _In_Src]="HPC") ), [DeregisteredTime]>=2) )

  • No @mehra_kanishk88 ,

    Prueba como a continuación:

    Paso 1, utilice la siguiente medida:

    bucket 1 = 
    VAR TEST1 =
        CALCULATE (
            MAX ( vw_fct_prnto_outlet_dergtn[outlet_id] ),
            FILTER (
                vw_fct_prnto_outlet_dergtn,
                vw_fct_prnto_outlet_dergtn[deregister_flg] = "Y"
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] >= DATE ( 2021, 6, 1 )
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] <= DATE ( 2021, 6, 30 )
            )
        )
    VAR TEST2 =
        CALCULATE (
            COUNT ( vw_fct_prnto_outlet_dergtn[deregister_dt] ),
            FILTER (
                vw_fct_prnto_outlet_dergtn,
                vw_fct_prnto_outlet_dergtn[outlet_id] = TEST1
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] <> BLANK ()
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] <= DATE ( 2021, 6, 30 )
                    && vw_fct_prnto_outlet_dergtn[deregister_flg] = "Y"
            )
        )   
    RETURN
        TEST2

    Esto es obtener el resultado sql:

    SELECT         outlet_id,
              hpc_busn_in_src,
        Count([deregister_dt]) Cnt
                                 FROM [PRNTO_V2].[vw_fct_prnto_outlet_dergtn] WITH (nolock)
    WHERE outlet_id IN 
    (SELECT outlet_id
    FROM [PRNTO_V2].[vw_fct_prnto_outlet_dergtn] WITH
    (
    nolock)
    WHERE [deregister_dt] IS NOT NULL
    AND deregister_flg = 'Y'
    AND [deregister_dt] BETWEEN
    '2021-06-01' AND '2021-06-30'
    )
    AND [deregister_dt] IS NOT NULL
    AND deregister_flg = 'Y'
    AND [deregister_dt]<= '2021-06-30'
    GROUP BY outlet_id,
    hpc_busn_in_src) T

    vluwangmsft_0-1626084265793.png

    Paso 2, use el siguiente dax para la nueva tabla:

    Table2 =
    SUMMARIZE (
        'vw_fct_prnto_outlet_dergtn',
        vw_fct_prnto_outlet_dergtn[outlet_id],
        vw_fct_prnto_outlet_dergtn[hpc_busn_in_src],
        "bucket1", [bucket 1]
    )

    A continuación, use el siguiente dax para crear una medida:

    bucket2 = CALCULATE(COUNT(Table2[outlet_id]),ALLEXCEPT(Table2,Table2[bucket1],Table2[hpc_busn_in_src]))

    Out final puesto:

    vluwangmsft_1-1626084398783.png

    ¡Puedes descargar mi archivo pbix si lo necesitas!

    Deseo que sea útil para usted!

    Saludos

    Lucien

2 Replies

  • No @mehra_kanishk88 ,

    ¿Puede usted proporcionar por favor algunos datos de muestra y la salida esperada de la muestra, realmente le ayudará a conseguir la solución adecuada.

    gracias

  • No @mehra_kanishk88 ,

    Prueba como a continuación:

    Paso 1, utilice la siguiente medida:

    bucket 1 = 
    VAR TEST1 =
        CALCULATE (
            MAX ( vw_fct_prnto_outlet_dergtn[outlet_id] ),
            FILTER (
                vw_fct_prnto_outlet_dergtn,
                vw_fct_prnto_outlet_dergtn[deregister_flg] = "Y"
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] >= DATE ( 2021, 6, 1 )
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] <= DATE ( 2021, 6, 30 )
            )
        )
    VAR TEST2 =
        CALCULATE (
            COUNT ( vw_fct_prnto_outlet_dergtn[deregister_dt] ),
            FILTER (
                vw_fct_prnto_outlet_dergtn,
                vw_fct_prnto_outlet_dergtn[outlet_id] = TEST1
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] <> BLANK ()
                    && vw_fct_prnto_outlet_dergtn[deregister_dt] <= DATE ( 2021, 6, 30 )
                    && vw_fct_prnto_outlet_dergtn[deregister_flg] = "Y"
            )
        )   
    RETURN
        TEST2

    Esto es obtener el resultado sql:

    SELECT         outlet_id,
              hpc_busn_in_src,
        Count([deregister_dt]) Cnt
                                 FROM [PRNTO_V2].[vw_fct_prnto_outlet_dergtn] WITH (nolock)
    WHERE outlet_id IN 
    (SELECT outlet_id
    FROM [PRNTO_V2].[vw_fct_prnto_outlet_dergtn] WITH
    (
    nolock)
    WHERE [deregister_dt] IS NOT NULL
    AND deregister_flg = 'Y'
    AND [deregister_dt] BETWEEN
    '2021-06-01' AND '2021-06-30'
    )
    AND [deregister_dt] IS NOT NULL
    AND deregister_flg = 'Y'
    AND [deregister_dt]<= '2021-06-30'
    GROUP BY outlet_id,
    hpc_busn_in_src) T

    vluwangmsft_0-1626084265793.png

    Paso 2, use el siguiente dax para la nueva tabla:

    Table2 =
    SUMMARIZE (
        'vw_fct_prnto_outlet_dergtn',
        vw_fct_prnto_outlet_dergtn[outlet_id],
        vw_fct_prnto_outlet_dergtn[hpc_busn_in_src],
        "bucket1", [bucket 1]
    )

    A continuación, use el siguiente dax para crear una medida:

    bucket2 = CALCULATE(COUNT(Table2[outlet_id]),ALLEXCEPT(Table2,Table2[bucket1],Table2[hpc_busn_in_src]))

    Out final puesto:

    vluwangmsft_1-1626084398783.png

    ¡Puedes descargar mi archivo pbix si lo necesitas!

    Deseo que sea útil para usted!

    Saludos

    Lucien