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

Be one of the first to start using Fabric Databases. View on-demand sessions with database experts and the Microsoft product team to learn just how easy it is to get started. Watch now

Reply
Syndicate_Admin
Administrator
Administrator

Obtenga la diferencia de 2 meses filtrando 1 mes para que sea cero

Hola tengo una tabla que se ve así:

cliente, mes, valor

A, oct, 0

A, noviembre, 500

A, dic, 600

B, Oct, 1000

B, noviembre, 800

B, dic, 0

C, oct, 300

C, nov, 400

C, dic, 200

.... Miles de clientes, cada uno con datos de 3 meses

Necesito obtener una lista de clientes que se fueron en un mes (por ejemplo. B se fue en diciembre), y que se incorporó en un mes (por ejemplo, A se unió en noviembre). No me importa si el valor de un cliente cambió de mes a mes, siempre y cuando el valor no sea cero.

¿Podría alguien ayudar?

19 REPLIES 19
Syndicate_Admin
Administrator
Administrator

Ryan, estaba buscando ayuda sobre cómo hacer 1+1+1+1..=10. Esperaba obtener respuestas como 1 + 1 + 1 ... = 2 + 1 + 1 + 1 ... = 3 + 1 + 1 ..= 10.

Ahora me das una respuesta de que esto es igual a 1 * 10, y que 10/1 = 10.

¡Pero muchas gracias por la hermosa respuesta y por pasar el tiempo! Esto me dice cuánto necesito aprender, comenzando con EARILER, EDATE, etc.

Permítanme digerir y puedo volver para preguntas específicas sobre su DAX.

Gracias de nuevo!

De nada

Ryan

EARLY parece ser un concepto doloroso, al menos para mí y para muchos otros. Google dice que puede ser reemplazado por VAR o variable. ¿Sería posible que hicieras esto sin usar EARLY, sino VAR?

Muchas gracias.

@ewu

Por favor, pruebe esto

Left = 
VAR _customer='Table'[customer]
VAR _month='Table'[month]
VAR _last=maxx(FILTER('Table','Table'[customer]=_customer&&'Table'[month]=EDATE(_month,-1)),'Table'[value])
return if(not(ISBLANK(_last))&&'Table'[value]=0,"Y")

Join = 
VAR _customer='Table'[customer]
VAR _month='Table'[month]
VAR _last=maxx(FILTER('Table','Table'[customer]=_customer&&'Table'[month]=EDATE(_month,-1)),'Table'[value])
return if(_last=0&¬(ISBLANK(_last))&&'Table'[value]<>0,"Y")
Syndicate_Admin
Administrator
Administrator

@ewu

Puedes probar esto

Left = 
VAR _last=maxx(FILTER('Table','Table'[customer]=EARLIER('Table'[customer])&&'Table'[month]=EDATE(EARLIER('Table'[month]),-1)),'Table'[value])
return if(not(ISBLANK(_last))&&'Table'[value]=0,"Y")

Join = 
VAR _last=maxx(FILTER('Table','Table'[customer]=EARLIER('Table'[customer])&&'Table'[month]=EDATE(EARLIER('Table'[month]),-1)),'Table'[value])
return if(_last=0&¬(ISBLANK(_last))&&'Table'[value]<>0,"Y")

1.PNG

Hola Ryan,

Muchas gracias, y ahora lo entiendo. Pero tal vez la programación tiene que ver con el pensamiento "contrahumano". ¿Cómo se te ocurrió ese proceso de pensamiento? ¿Por qué usar mes-1, no mes+1 (por supuesto, si es así, es necesario ajustar otro conente)?

Screenshot 2023-02-21 134649.png

Ryan

Traté de hacer lo que escribiste. Pero simplemente no me permite escribir nada detrás de "VAR Customer=". Nada aparece automáticamente como esperaba que yo eligiera. ¿Podría decirme por qué?

Gracias.

pls intenta crear una columna, no una medida

Hola Ryan,

Acabo de ver tu mensaje de alguna manera hoy ... Muchas gracias. Funcionó.. casi...


El nuevo problema es que una vez que cargo los datos sin procesar, encuentro que en realidad las filas de valor 0 no existen. Por lo tanto, un cliente abandonado en noviembre = un cliente con valor solo en octubre, y no aparecen otras filas para este cliente

¿Cómo sería este DAX? ¡¡¡Gracias!!!

¿Podría actualizar los datos de muestra y proporcionar el resultado esperado también?

Datos brutos: Resultados:
Cliente MesValor Batido MesValor
Aoct-22100 Adic-22110
Anov-22110 Dfeb-23680
Boct-221000
Bnov-221000 Resultados:
Bdic-221200 NuevoMesValor
Bene-231200 Cene-23500
Bfeb-23900 Dnov-22700
Cene-23500
Cfeb-23530
Dnov-22700
Ddic-22720
Dene-23680

¿Por qué no tenemos B en los resultados?

¿Por qué los nuevos solo tienen C y D, qué pasa con la primera fila para A? ¿Es eso también nuevo?

Buena pregunta. Supongamos que octubre es el primer mes de operación, por lo que cualquier nueva / rotación comienza en noviembre

¿Por qué se agita solo A y D? ¿Por qué las últimas filas para B y C no se agitan?

Hola Ryan, esto se debe a que B y C tienen valores en febrero de 2023, el último mes.

@ewu

Por favor, pruebe esto

New = 
VAR _min=min('Table'[Month])
VAR _min2=CALCULATE(min('Table'[Month]),ALLEXCEPT('Table','Table'[Customer ]))
return if(_min2>_min&& _min2='Table'[Month],"y")

churned = 
VAR _min=min('Table'[Month])
VAR _max=CALCULATE(max('Table'[Month]),ALLEXCEPT('Table','Table'[Customer ]))
return if(_max

1.PNG

Aquí está Ryan. Debería haberlo dejado más claro. Muchas gracias.

ewu_0-1677632564320.png

Aquí hay una mejor toma de imagen

Ryan

Funcionó, y revisé un poco con algunos datos extraños (algunos se unieron y se fueron rápidamente, etc.) Muchas gracias. Ahora tengo un nuevo desafío. ¿Podría ayudarme, por favor?

ewu_0-1677996955724.png

¿Cómo puedo pasar de las 2 tablas superiores a la tabla inferior? Si puedo aprender a entender lo que escribirás e incluso ser capaz de hacerlo yo mismo más tarde, ¿se considera esto lograr DAX avanzado ya?

Helpful resources

Announcements
Las Vegas 2025

Join us at the Microsoft Fabric Community Conference

March 31 - April 2, 2025, in Las Vegas, Nevada. Use code MSCUST for a $150 discount!

Dec Fabric Community Survey

We want your feedback!

Your insights matter. That’s why we created a quick survey to learn about your experience finding answers to technical questions.

ArunFabCon

Microsoft Fabric Community Conference 2025

Arun Ulag shares exciting details about the Microsoft Fabric Conference 2025, which will be held in Las Vegas, NV.

December 2024

A Year in Review - December 2024

Find out what content was popular in the Fabric community during 2024.

Top Solution Authors
Top Kudoed Authors