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

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
Syndicate_Admin
Administrator
Administrator

Solo quiero medir el bucketing por línea, no el total

Hola a todos,

¿Hay alguna manera de hacer que una medida de cubo funcione línea por línea y agregue desde allí, en lugar de agrupar el total? Aquí está mi escenario:

Primero, tengo una medida que calcula la antigüedad dinámica de una factura en función de una fecha de referencia seleccionada que funciona:

MEDIDA1
Antigüedad de la factura en Daysx =
DÓNDE CurrentDate = calcular(..max('Fechas de referencia'[Fecha]),
RELACIÓN DE USO('Fechas de referencia'[Fecha],'Ventas y colecciones'[CERRADO]))
DÓNDE EnvejecimientoDiferencia = calcular(sumx('Ventas y colecciones',datediff('Ventas y colecciones'[FECHA DE VENCIMIENTO],CurrentDate,DÍA)),
TODO('Fechas de referencia'[Fecha]),
'Ventas y colecciones'[CERRADO]>CurrentDate,
'Ventas y colecciones'[TRANSDATE]<=CurrentDate)
DEVOLUCIÓN
EnvejecimientoDiferencia
Luego tengo una medida que agrupa esto en grupos predefinidos:
MEDIDA 2:
Factura Agingx =
DÓNDE CurrentDate = calcular(..max(«Fechas de referencia» [fecha]),
RELACIÓN DE USO('Fechas de referencia'[Fecha],'Ventas y colecciones' [CERRADO]))
DÓNDE AgingDifference = calcular(sumx(«Ventas y colecciones»,datediff('Ventas y colecciones' [DUEDATE],CurrentDate,DAY)),
TODO(«Fechas de referencia» [fecha]),
'Ventas y colecciones'[CERRADO]>CurrentDate,
'Ventas y colecciones'[TRANSDATE]<=CurrentDate)
DÓNDE AgingBucket = si(isblank(AgingDifference),espacio en blanco(),
si(
EnvejecimientoDiferencia<=0,"Actual",
si(AgingDifference<=15,"<=15",
si(AgingDifference<=30,"16-30",
si(AgingDifference<=90,"31-90",
si(Diferencia de envejecimiento>90,">90",espacio en blanco()))))))
DEVOLUCIÓN
AgingBucket

Luego tengo un cálculo final que calcula las ventas para esa factura si la fecha de transacción es anterior a nuestra fecha de referencia seleccionada, y la fecha de cierre es posterior a la fecha seleccionada. También lo tengo en blanco si la fecha de referencia es en el futuro (como mi tabla de referencia va muy lejos en el futuro, no quiero que se muestre en la línea). Mi campo "Grupos" es una tabla de referencia estática con los nombres enumerados de los cubos.

MEDIDA 3:

AR en grupo = sumx('Caducidad de facturas',si('Caducidad de facturas'[Factura Agingx] = 'Caducidad de facturas'[Grupos],si(..max('Fechas de referencia'[Fecha]) > Hoy(),espacio en blanco(),
CALCULAR(
[Ventas],
FILTRO(
TODO('Fechas de referencia'[Fecha]),
ISONORDESPUÉS('Fechas de referencia'[Fecha], ..MAX('Fechas de referencia'[Fecha]), DESC)
)
)),0))

Esta tabla a continuación muestra una factura (tachada, pero es el mismo número) y su cálculo para cada fecha de referencia. Puede ver el cambio del cubo cuando tiene 16 días, y puede verlo desaparecer el día 25 cuando se cierra / paga. Como tal, todas estas medidas funcionan a nivel de factura individual.

Controller123_1-1679593319869.png

Puede ver que cuando agrego otras facturas a la lista, todavía se agrupa correctamente:

Controller123_2-1679593490221.png

Sin embargo, mi problema surge cuando elimino el campo de factura (puede notar que ya está haciendo esto en los "totales" de esa tabla superior). El valor predeterminado es la suma de la antigüedad de la factura en días y asigna a todo el total un nuevo bucket. Como tal, para estas dos facturas del 24 de julio, podemos ver que cree que hay $ 3,400 de facturas en el cubo de <15 días de vencimiento.

¿Hay alguna manera de cambiarlo para que se resuma por cubo por factura en lugar de volver a calcularlo para el total? Me imagino que necesitaré algún tipo de función iterativa o filtro, pero no puedo entenderlo. También estoy de acuerdo con tener múltiples medidas, una para cada grupo (Actual, < = 15, etc.), ya que el objetivo final es crear un gráfico de líneas con la fecha como eje x y cada cubo de envejecimiento como la línea (para ver la tendencia del envejecimiento a lo largo del tiempo).

No puedo proporcionar datos de muestra, pero mis campos principales son número de factura, fecha de transacción, fecha de vencimiento, fecha de cierre e importe. Todos los demás campos son tablas adicionales o de referencia creadas por mí.

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

No creo que su Medida 1 sea correcta. Esta versión parece funcionar mejor

Invoice Age in Daysx = 
VAR CurrentDate = max('Reference Dates'[Date])
return calculate(sumx('Sales and Collections',datediff(CurrentDate,'Sales and Collections'[DUEDATE],DAY)),
ALL('Reference Dates'[Date]),
'Sales and Collections'[CLOSED]>CurrentDate,
'Sales and Collections'[TRANSDATE]<=CurrentDate)

lbendlin_0-1680035897578.png

A continuación, necesita una mesa estática con sus cubos.

Buckets = DATATABLE("Bucket",INTEGER,"Text",STRING,{{0,"Current"},{1,"<=15"},{2,"16-30"},{3,"31-90"},{4,">90"}})

Y, por último, debe crear un cartesiano entre el texto del cubo y la fecha del calendario, y ejecutar su medida de envejecimiento.

Aging = 
var d = max('Reference Dates'[Date])
var b = max(Buckets[Bucket])
var c = CALCULATETABLE('Sales and Collections',
ALL('Reference Dates'[Date]),
'Sales and Collections'[CLOSED]>d,
'Sales and Collections'[TRANSDATE]<=d)
var e = ADDCOLUMNS(c,"diff",DATEDIFF(d,[DUEDATE],DAY))
return switch(b,
0,countrows(filter(e,[diff]<=0)),
1,countrows(filter(e,[diff]<=15)),
2,countrows(filter(e,[diff]<=30)),
3,countrows(filter(e,[diff]<=90)),
countrows(filter(e,[diff]>90))
)

lbendlin_1-1680037231373.png

Luego puede usar la misma metodología para las otras medidas.

Parece que esta fórmula está contando dos veces algunas cosas. Por ejemplo, hay dos facturas con una fecha de cierre el 30 de abril de 2023 (y estas son las únicas dos que aún están abiertas para esta fecha). Su gráfico de líneas dice que hay dos en cada categoría en esta fecha, en lugar de solo dos en uno de los cubos. ¿Cómo solucionamos eso?

Además, si quiero usar cantidad en lugar de recuento de facturas, ¿cambiaría esa última parte de la medida 3 donde usa "countrows" a un sumx?

Sí, mi mal. Aquí está la fórmula corregida

# Aging = 
var d = max('Reference Dates'[Date])
var b = max(Buckets[Bucket])
var c = CALCULATETABLE('Sales and Collections',
ALL('Reference Dates'[Date]),
'Sales and Collections'[CLOSED]>d,
'Sales and Collections'[TRANSDATE]<=d)
var e = ADDCOLUMNS(c,"diff",DATEDIFF(d,[DUEDATE],DAY))
return switch(b,
0,countrows(filter(e,[diff]<=0)),
1,countrows(filter(e,[diff]>0 && [diff]<=15)),
2,countrows(filter(e,[diff]>15 && [diff]<=30)),
3,countrows(filter(e,[diff]>30 && [diff]<=90)),
countrows(filter(e,[diff]>90))
)

y el valor

$ Aging = 
var d = max('Reference Dates'[Date])
var b = max(Buckets[Bucket])
var c = CALCULATETABLE('Sales and Collections',
ALL('Reference Dates'[Date]),
'Sales and Collections'[CLOSED]>d,
'Sales and Collections'[TRANSDATE]<=d)
var e = ADDCOLUMNS(c,"diff",DATEDIFF(d,[DUEDATE],DAY))
return switch(b,
0,sumx(filter(e,[diff]<=0),[ AMOUNT ]),
1,sumx(filter(e,[diff]>0 && [diff]<=15),[ AMOUNT ]),
2,sumx(filter(e,[diff]>15 && [diff]<=30),[ AMOUNT ]),
3,sumx(filter(e,[diff]>30 && [diff]<=90),[ AMOUNT ]),
sumx(filter(e,[diff]>90),[ AMOUNT ])
)

Los datos de muestra tienen poca variación, por lo que los gráficos tienen un aspecto muy similar.

Todo esto se ve muy bien, y sí, lo siento, traté de variar los datos de muestra lo mejor que pude, pero terminé siendo similar.

Última pregunta: ¿hay alguna manera de calcular esto como un porcentaje del total para esa función en dólares? Intenté hacer clic en mostrar valor como un % del total general, pero eso no funcionó.

sí, cambie la función Return para comparar la cantidad del bucket con la cantidad total

$ Aging % = 
var d = max('Reference Dates'[Date])
var b = max(Buckets[Bucket])
var c = CALCULATETABLE('Sales and Collections',
ALL('Reference Dates'[Date]),
'Sales and Collections'[CLOSED]>d,
'Sales and Collections'[TRANSDATE]<=d)
var e = ADDCOLUMNS(c,"diff",DATEDIFF(d,[DUEDATE],DAY))
return divide(switch(b,
0,sumx(filter(e,[diff]<=0),[ AMOUNT ]),
1,sumx(filter(e,[diff]>0 && [diff]<=15),[ AMOUNT ]),
2,sumx(filter(e,[diff]>15 && [diff]<=30),[ AMOUNT ]),
3,sumx(filter(e,[diff]>30 && [diff]<=90),[ AMOUNT ]),
sumx(filter(e,[diff]>90),[ AMOUNT ])
),sumx(e,[ AMOUNT ]))

Syndicate_Admin
Administrator
Administrator

"No puedo dar datos de muestra", creo que puedes.

Proporcione datos de muestra que cubran su problema o pregunta por completo, en un formato utilizable (no como una captura de pantalla).
https://community.powerbi.com/t5/Community-Blog/How-to-provide-sample-data-in-the-Power-BI-Forum/ba-...
Muestre el resultado esperado en función de los datos de muestra que proporcionó.

https://community.powerbi.com/t5/Desktop/How-to-Get-Your-Question-Answered-Quickly/m-p/1447523

Se agregaron datos de ejemplo a través de Google Drive según las instrucciones y una imagen de ejemplo de lo que espero crear en Power BI. ¡gracias!

Helpful resources

Announcements
June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.

Top Solution Authors