Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
3 years ago

Consulta SQL de Oracle a DAX

Tenemos que convertir esta consulta ORACLE SQL (abajo) de un sistema heredado a dax. Cada report_date es dinámico en el sistema heredado. Necesito dividir con la segmentación de datos ENTRE FECHAS en Power BI que puede usar la report_date MIN/MAX.

Esta consulta obtiene compradores habituales que solo realizaron un pedido en un rango especificado y que no han realizado ningún pedido 6 meses antes a partir del día de inicio, de ahí la parte MENOS 180.

¿Cómo puedo volver a escribir la consulta en DAX que incluye la sección MENOS de -180 que excluye a los compradores habituales que realizaron un pedido en Power BI? El resultado final depende de lo que se seleccione en la segmentación de datos entre fechas, que puedo verificar en la base de datos PROD.

Agregar datos de ejemplo:

report_datemem_countrevenue_d
3/3/2023692034433.49
11/28/2022204288131.99
2/16/2023997932833.49
10/7/2022831472432.49
12/28/2022120713727.49
11/28/2022631363831.99
12/28/2022274985120.18
2/12/2023956469023.37
8/20/2022592261523.99
1/20/2023359254826.79
10/15/20227639120163.92
10/24/2022531011125.29
11/28/20223083856113.96
11/9/2022391893425.29
3/11/2023530091226.79
11/4/2022649990440.98
9/28/2022981655825.29
3/11/2023870986716.49

Conjunto de datos de muestra más grande:

https://docs.google.com/spreadsheets/d/1fcy2vGXqML8Y7jlI23_5efkN5jn6COkx/edit?usp=sharing&ouid=113519826383861936199&rtpof=true&sd=true

ESCOGER
NVL(SUMA(mem_count),0) COMO repeat_shoppers,
CASO CUANDO SUMA(revenue_d) > 0 Y SUMA(mem_count) > 0 ENTONCES SUMA(revenue_d)/SUMA(mem_count) MÁS 0 FIN avg_spend_repeat_d
DE
(ESCOGER
CONTAR( DISTINTO mbr.membership_number) COMO mem_count ,
SUMA(demand_revenue) COMO revenue_d
DE dw_summary.ddh_product_detail_new pd,
( ( ESCOGER membership_number DE(
ESCOGER membership_number, CONTAR(DISTINTO order_number) COMO order_count
DE dw_summary.ddh_product_detail_new
DÓNDE report_date ENTRE '2020-02-02' Y '2020-09-19' --dinámico
Y digital_channel = 'OPIC'
Y membership_number NO ES NULL
AGRUPAR POR membership_number
TENIENTE CONTAR(DISTINTO order_number) > 1)
MENOS
SELECCIONAR DISTINTO membership_number
DE dw_summary.ddh_product_detail_new
DÓNDE report_date < '2020-02-02' Y report_date >= '2020-02-02'-180 --dinámico
Y digital_channel = 'OPIC'
Y membership_number NO ES NULL
)
UNIÓN
( SELECCIONAR DISTINTO membership_number
DE dw_summary.ddh_product_detail_new
DÓNDE report_date ENTRE '2020-02-02' Y '2020-09-19' --dinámico
Y digital_channel = 'OPIC'
Y membership_number NO ES NULL
CRUZAR
SELECCIONAR DISTINTO membership_number
DE dw_summary.ddh_product_detail_new
DÓNDE report_date < '2020-02-02' Y report_date >= '2020-02-02'-180 --dinámico
Y digital_channel = 'OPIC'
Y membership_number NO ES NULL
)
) MBR
DÓNDE pd.membership_number = mbr.membership_number
Y pd.digital_channel = 'OPIC'
Y report_date ENTRE '2020-02-02' Y '2020-09-19' --dinámico
);

Aquí está la consulta:

No RepliesBe the first to reply