Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code MSCUST for a $150 discount.
Register nowThe 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.
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
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])
devolución
Por favor, ayúdame con tus soluciones.
@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...