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

The Power BI DataViz World Championships are on! With four chances to enter, you could win a spot in the LIVE Grand Finale in Las Vegas. Show off your skills.

Reply
Syndicate_Admin
Administrator
Administrator

La iteración debe funcionar hasta que se supere la condición

Hola equipo,
Tengo tres mesas:
*Mesa de ventas
*Mesa Sobresaliente
*Tabla de fechas

Escenario:
si la venta de max(month) es mayor que la pendiente de max(month), entonces Recuento de días en un mes
si la venta de max(month) es menor que la pendiente de max(month), entonces debería encontrar el valor de la diferencia, lo que significa Outstanding menos Sales(we obtendremos alguna diferencia(d1))... Ahora tenemos que comparar la diferencia con el valor de las ventas del mes anterior
Si la venta de max(month)-1 es mayor que la diferencia(d1), entonces cuenta de los días en max(month) + difference(d1) / (ventas de max(month)-1/count of days in max(month)-1)
Si la venta de max(month)-1 es menor que la diferencia(d1), entonces nuevamente necesitamos encontrar los valores de diferencia ahora diferencia entre d1 y la venta de max(month)-1 (d1 - venta de max(month)-2), obtendremos la diferencia (d2)... Nuevamente, necesitamos comparar D2 con el valor de venta de Max(Month)-2

De esta manera, la iteración funcionará hasta que el valor de la diferencia sea menor que el valor de venta...

Aquí adjuntaré una captura de pantalla para una mejor comprensión

SharmilaBrisca_1-1738750079729.png

En Power BI, puedo implementar esta lógica de la siguiente manera... Pero he escrito manualmente la condición durante 5 meses. Pero necesito esta lógica hasta que la diferencia sea menor que el valor de venta.

Días =
var d = IF([Ventas CM]<[Total pendiente],[Total pendiente]-[Ventas CM])

Var PS = CALCULAR([CM Ventas],ANTERIORMES('Tabla de fechas'[Fecha]))
Var PD = CALCULAR(MÁXIMO('Tabla de fechas' [días en el mes]),ANTERIORMES('Tabla de fechas'[Fecha]))

Var D2 = D - PS
Var P2Ventas = CALCULAR([CM Ventas],FECHAAÑADIR('Tabla de fechas'[Fecha],-2,MES))
Var P2Días = CALCULAR(MÁXIMO('Tabla de fechas' [días en el mes]),FECHAAÑADIR('Tabla de fechas'[Fecha],-2,MES))

Var D3 = D2 - P2Ventas
Var P3Ventas = CALCULAR([CM Ventas],FECHAAÑADIR('Tabla de fechas'[Fecha],-3,MES))
Var P3Días = CALCULAR(MÁXIMO('Tabla de fechas' [días en el mes]),FECHAAÑADIR('Tabla de fechas'[Fecha],-3,MES))

Var D4 = D3 - P3Ventas
Var P4Ventas = CALCULAR([CM Ventas],FECHAAÑADIR('Tabla de fechas'[Fecha],-4,MES))
Var P4Días = CALCULAR(MÁXIMO('Tabla de fechas' [días en el mes]),FECHAAÑADIR('Tabla de fechas'[Fecha],-4,MES))

Var D5 = D4 - P4Ventas
Var P5Ventas = CALCULAR([CM Ventas],FECHAAÑADIR('Tabla de fechas'[Fecha],-5,MES))
Var P5Días = CALCULAR(MÁXIMO('Tabla de fechas' [días en el mes]),FECHAAÑADIR('Tabla de fechas'[Fecha],-5,MES))

devolución

IF([CM Ventas] = ESPACIO EN BLANCO() && [Total pendiente] = ESPACIO EN BLANCO(),ESPACIO EN BLANCO(),
IF([CM Ventas] >= [Total pendiente],
MÁXIMO('Tabla de fechas' [días en el mes]),
IF(PS >= D,
CALCULAR(MÁXIMO('Tabla de fechas' [días en el mes]) + (D/(PS/PD))),
IF(P2Ventas>=D2,
CALCULAR(MÁXIMO('Tabla de fechas' [Días en el mes]) + PD + (D2/(P2Sales/P2Days))),
IF(P3Ventas >= D3,
CALCULAR(MÁXIMO('Tabla de fechas' [Días en el mes]) + PD + P2Días + (D3/(P3Sales/P3Days))),
IF(P4Sales > D4,
CALCULAR(MÁXIMO('Tabla de fechas' [Días en el mes]) + PD + P2Días + P3Días + (D4/(P4Sales/P4Days))),
IF(P5Sales > D5,
CALCULAR(MÁXIMO('Tabla de fechas' [Días en el mes]) + PD + P2Días + P3Días + P4Días + (D5/(P5Sales/P5Days))))))))

Por favor, ayúdame con tus soluciones.




5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

Hola @dufoq3 , ¿puedes echar un vistazo a esto?

Syndicate_Admin
Administrator
Administrator

@SharmilaBrisca , para esto primero cree una medida

Calcule el mes máximo para Ventas y Pendientes:

MaxMonthSales = CALCULATE(MAX('Tabla de ventas'[Mes]))
MaxMonthOutstanding = CALCULATE(MAX('Tabla pendiente'[Mes]))

Calcule las ventas y los valores pendientes para el mes máximo:

SalesMaxMonth = CALCULATE(SUM('Tabla de ventas' [Ventas]), 'Tabla de ventas'[Mes] = [MaxMonthSales])
PendienteMaxMonth = CALCULATE(SUM('Tabla pendiente' [Pendiente]), 'Tabla pendiente'[Mes] = [MaxMonthPendiente])

Cree una medida para comprobar la condición y realizar la iteración:

MedidaResultado =
VAR MaxMonth = [MaxMonthSales]
VAR SalesMax = [SalesMaxMonth]
VAR SobresalienteMax = [SobresalienteMaxMonth]
VAR DaysInMaxMonth = CALCULATE(COUNTROWS('Tabla de fechas'), 'Tabla de fechas'[Month] = MaxMonth)

Diferencia de VAR = SobresalienteMax - VentasMax
Iteración del VAR =
SI (SalesMax > SobresalienteMax,
DaysInMaxMonth,
VAR AntMonth = MaxMonth - 1
VAR SalesPrevMonth = CALCULATE(SUM('Tabla de ventas' [Ventas]), 'Tabla de ventas'[Mes] = PrevMonth)
VAR DaysInPrevMonth = CALCULATE(COUNTROWS('Tabla de fechas'), 'Tabla de fechas'[Month] = PrevMonth)
VAR Diff1 = Diferencia
Resultado del VAR =
IF(SalesPrevMonth > Diff1,
DaysInMaxMonth + Diff1 / (SalesPrevMonth / DaysInPrevMonth),
VAR Diff2 = Diff1 - SalesPrevMonth
VAR AntMes2 = AntMes - 1
VAR SalesPrevMonth2 = CALCULATE(SUM('Tabla de ventas' [Ventas]), 'Tabla de ventas' [Mes] = PrevMonth2)
VAR DaysInPrevMonth2 = CALCULATE(COUNTROWS('Tabla de fechas'), 'Tabla de fechas'[Month] = PrevMonth2)
Continúe con la lógica de iteración aquí
Puede utilizar un enfoque o bucle recursivo hasta que se cumpla la condición
Para simplificar, supongamos que nos detenemos aquí
DaysInMaxMonth + Diff2 / (SalesPrevMonth2 / DaysInPrevMonth2)
)
Resultado
)
Iteración

Hola, mi requerimiento es que la iteración funcione automáticamente si la condición falla...

@SharmilaBrisca , Intente usar

Días =
VAR MaxMonth = MAX('Tabla de fechas'[Fecha])
VAR MaxDays = MAX('Tabla de fechas' [Días en el mes])
VAR MaxSales = [CM Ventas]
VAR MaxOutstanding = [Total Pendiente]

Resultado del VAR =
SI(
MaxSales >= MaxSobresaliente,
MaxDays,
VAR DaysInMonth = MaxDays
Diferencia de VAR = MaxOutstanding - MaxSales
Contador de meses VAR = 1
VAR LoopResult =
MIENTRAS(
VERDADERO(),
VAR PrevMonth = DATEADD(MaxMonth, -MonthCounter, MONTH)
VAR AntVentas = CALCULAR([CM Ventas], AntMes)
VAR PrevDays = CALCULATE(MAX('Date Table' [Days in Month]), PrevMonth)
VAR NewDifference = Diferencia - AntSales
VAR NewDaysInMonth = DaysInMonth + (Diferencia / (PrevSales / PrevDays))
DEVOLUCIÓN
SI(
AntVentas >= Diferencia,
NewDaysInMonth,
VAR NewMonthCounter = MonthCounter + 1
VAR NewDifference = NewDifference
VAR NewDaysInMonth = NewDaysInMonth
DEVOLUCIÓN
SI(
NuevaDiferencia <= 0,
NewDaysInMonth,
EN BLANCO()
)
)
)
RETURN LoopResult
)

Resultado RETURN

Hola
La medida que ha devuelto tiene un error en la variable LoopResult...

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!

Feb2025 Sticker Challenge

Join our Community Sticker Challenge 2025

If you love stickers, then you will definitely want to check out our Community Sticker Challenge!

Top Solution Authors