Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

We've captured the moments from FabCon & SQLCon that everyone is talking about, and we are bringing them to the community, live and on-demand. Starts on April 14th. Register now

Reply
Syndicate_Admin
Administrator
Administrator

Convertir Oracle SQL Query a DAX

Salida esperada - first_shoppers = 3083

Salida esperada - avg_spend_first_d = 134.53

Agregar datos de ejemplo:

report_datecanalmembership_numdemand_revenue
3/1/2023OPIC6923297473.89
12/1/2022OPIC692329795.57
3/1/2023OPIC4732483220.59
3/1/2023OPIC796879954.09
3/1/2023OPIC770789199.94
3/1/2023OPIC295379767.22
3/1/2023OPIC2119246173.53
3/1/2023OPIC2159933159.96
3/1/2023OPIC2276172260.8
3/1/2023OPIC554957599.13
3/1/2023OPIC210926476.79
3/1/2023OPIC9386426126.91
3/1/2023OPIC679898082.36
3/1/2023OPIC4165529151.66
3/1/2023OPIC9276831298.21
3/1/2023OPIC4771072106.87
11/1/2022OPIC4771072304.89
3/1/2023OPIC3956433153.84
3/1/2023OPIC1650323100.91
3/1/2023OPIC997608576.52
3/1/2023OPIC1061082115.94

Datos completos

https://docs.google.com/spreadsheets/d/1iiuPFVPFpS7ojtMRlEaRxQPKpR8I-8g8/edit?usp=sharing&ouid=11351...

Tenemos que convertir esta consulta ORACLE SQL (abajo) de un sistema heredado a dax. Cada report_date es dinámico en el sistema heredado.

Esta consulta obtiene compradores por primera vez 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 que realizaron un pedido en Power BI?

Aquí está la consulta:

ESCOGER
NVL(SUMA(mem_count),0) COMO first_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_first_d
DE
( ESCOGER
CONTAR( DISTINTO mbr.membership_num) COMO mem_count ,
SUMA(demand_revenue) COMO revenue_d
DE producto pd,
( ESCOGER membership_num DE
( ESCOGER membership_num, CONTAR(DISTINTO order_num) COMO order_count
DE producto
DÓNDE report_date ENTRE '2023-03-01' Y '2023-03-02'--dinámico
Y canal = 'OPIC'
Y membership_num NO ES NULL
AGRUPAR POR membership_num
TENIENTE CONTAR(DISTINTO order_num) = 1
)
MENOS
SELECCIONAR DISTINTO membership_num
DE producto
DÓNDE report_date < '2023-03-01' Y report_date >= '2023-03-02'-180 --dinámico
Y canal = 'OPIC'
Y membership_num NO ES NULL
) MBR
DÓNDE pd.membership_num = mbr.membership_num
Y pd.channel = 'OPIC'
Y report_date ENTRE '2023-03-01' Y '2023-03-02' --dinámico
);
2 REPLIES 2
Syndicate_Admin
Administrator
Administrator

@PowerBIET Debería ser algo en este sentido. Consulte PBIX adjunto debajo de la firma. Difícil de probar porque solo tiene un mes de datos.

First Shoppers = 
    VAR __DaysAgo = 180
    VAR __MinRange = MIN('Table'[report_date])
    VAR __TableRange1 = SUMMARIZE('Table',[membership_num],"__Count",COUNTROWS('Table'))
    VAR __TableRange2 = FILTER(__TableRange1, [__Count] = 1)
    VAR __PastRange = FILTER(ALL('Table'),[report_date] < __MinRange && [report_date] >= __MinRange - 180)
    VAR __FirstShoppers = DISTINCT(SELECTCOLUMNS(__TableRange2,"__MemberNum",[membership_num]))
    VAR __PastShoppers = DISTINCT(SELECTCOLUMNS(__PastRange,"__MemeberNum",[membership_num]))
    VAR __MembersOfInterest = 
        EXCEPT(
            __FirstShoppers,
            __PastShoppers
        )
    VAR __Result = COUNTROWS(__MembersOfInterest)
RETURN
   __Result

Average Spend = 
    VAR __DaysAgo = 180
    VAR __MinRange = MIN('Table'[report_date])
    VAR __TableRange1 = SUMMARIZE('Table',[membership_num],"__Count",COUNTROWS('Table'))
    VAR __TableRange2 = FILTER(__TableRange1, [__Count] = 1)
    VAR __PastRange = FILTER(ALL('Table'),[report_date] < __MinRange && [report_date] >= __MinRange - 180)
    VAR __FirstShoppers = DISTINCT(SELECTCOLUMNS(__TableRange2,"__MemberNum",[membership_num]))
    VAR __PastShoppers = DISTINCT(SELECTCOLUMNS(__PastRange,"__MemeberNum",[membership_num]))
    VAR __MembersOfInterest = 
        EXCEPT(
            __FirstShoppers,
            __PastShoppers
        )
    VAR __Result = AVERAGEX(FILTER('Table', [membership_num] IN __MembersOfInterest),[demand_revenue])
RETURN
    __Result

Gracias, esto a continuación terminó siendo mi código final, después de agregar una segmentación de datos relativa.
Compradores =
VAR __MinRange = CALCULAR( MIN(Cal[Fecha]) )
VAR __MaxRange = CALCULAR( max(Cal[Fecha]) )

VAR __TableRange1 = SUMMARIZE('Table',[membership_num],"__Count", DISTINCTCOUNT('Table'[order_num]) )

var a = CALCULATETABLE( VALUES('Table'[membership_num]), FILTER(__TableRange1,[__Count]=1) )
var b = CALCULATETABLE( VALUES('Table'[membership_num]),
FILTER(ALL('Cal'),[Date] >= __MaxRange - 180 && [Date] < __MinRange ) )
DONDE __MembersOfInterest =
EXCEPTUAR(
un
b
)
VAR __Result = COUNTROWS(__MembersOfInterest)

DEVOLUCIÓN
__Resultado

Helpful resources

Announcements
New to Fabric survey Carousel

New to Fabric Survey

If you have recently started exploring Fabric, we'd love to hear how it's going. Your feedback can help with product improvements.

Power BI DataViz World Championships carousel

Power BI DataViz World Championships - June 2026

A new Power BI DataViz World Championship is coming this June! Don't miss out on submitting your entry.

Join our Fabric User Panel

Join our Fabric User Panel

Share feedback directly with Fabric product managers, participate in targeted research studies and influence the Fabric roadmap.

March Power BI Update Carousel

Power BI Community Update - March 2026

Check out the March 2026 Power BI update to learn about new features.

Top Kudoed Authors