Forum Discussion
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 TEST2Esto 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) TPaso 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:
¡Puedes descargar mi archivo pbix si lo necesitas!
Deseo que sea útil para usted!
Saludos
Lucien
2 Replies
- Syndicate_Admin
Administrator
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
- Syndicate_Admin
Administrator
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 TEST2Esto 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) TPaso 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:
¡Puedes descargar mi archivo pbix si lo necesitas!
Deseo que sea útil para usted!
Saludos
Lucien