Forum Discussion
Syndicate_Admin
Administrator
5 years agoConversió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 luga...
- 5 years ago
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
Syndicate_Admin
Administrator
5 years agoNo @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
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:
¡Puedes descargar mi archivo pbix si lo necesitas!
Deseo que sea útil para usted!
Saludos
Lucien