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

Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!

Reply
Syndicate_Admin
Administrator
Administrator

Sumas acumulativas: identificar cuándo un subconjunto del conjunto de datos supera un límite determinado

Hola

Tenga el siguiente conjunto de datos:

CaseNumberValueChangeTransactionDateCostLimit
110001/01/2021500
120002/01/2021500
210003/01/20211000
320004/01/20211000
310005/01/20211000
150006/01/2021500
2100007/01/20211000
410008/01/2021500
525009/01/20211000
1-40010/01/2021500
2-50011/01/20211000
320012/01/20211000
610013/01/20211000
725014/01/2021500
842015/01/2021500
96916/01/20211000
1040017/01/20211000
460018/01/2021500
510019/01/20211000
115020/01/2021500

Tengo una suma acumulada general trabajando perfectamente en esto usando una tabla de fechas relacionada con la columna TransactionDate, y una medida bastante estándar:

CumulativeSum = calculate(sum([ValueChange]),filter(all(DateTable[Date]),DateTable[Date]<=max(DateTable[Date])))

Lo que tengo que hacer es identificar cuándo y por cuánto, para cada número de caso, la suma está superando el valor CostLimit, que permanece constante para cada número de caso. En otras palabras, devolvería un resultado de 300 para el caso 1 del 6/1 al 10/1, devolvería un resultado de 100 para el caso 2 del 7/1 al 11/1, y devolvería un resultado de 200 para el caso 4 a partir del 18/1 - cada otro caso devolvería un resultado cero o nulo. ¿Alguna idea?

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

Hola, @jthomson

De acuerdo con su descripción y explicación con ejemplos, puedo entender más o menos su requisito, desea obtener la suma acumulada del grupo [cambio de valor] por [Número de caso] y darles el último valor que es menor que [CostLimit] cuando están por encima del valor de [CostLimit], ¿verdad?

Si es así, puedes probar mis pasos:

Creo estas columnas calculadas, utilicé columnas calculadas para lograr esto porque las medidas no son adecuadas para el cálculo en función de las últimas filas.

CumulativeSum =
CALCULATE(
SUM('Table'[ValueChange]),
FILTER(ALLSELECTED('Table'),
[CaseNumber]=EARLIER([CaseNumber])&&
[TransactionDate]<=EARLIER([TransactionDate])))
Index =

RANKX(FILTER(ALLSELECTED('Table'),[CaseNumber]=EARLIER('Table'[CaseNumber])),[TransactionDate],,ASC,Dense)
Output =
var _lastindex=
CALCULATE(
MAX('Table'[Index]),
FILTER(ALL('Table'),
[CaseNumber]=EARLIER([CaseNumber])&&
[CumulativeSum]<=EARLIER([CostLimit])&&
[Index]<=EARLIER([Index])))
var _lastvalue=
CALCULATE(
MAX('Table'[CumulativeSum]),
FILTER(ALL('Table'),
[CaseNumber]=EARLIER([CaseNumber])&&
[Index]=_lastindex))
return
IF([CumulativeSum]>[CostLimit],_lastvalue,0)

Ésta es la salida de estas columnas calculadas en la tabla:

v-robertq-msft_0-1614328656257.png

Luego creé un gráfico de tablas y lo puse así:

v-robertq-msft_1-1614328656269.png

Y supongo que esto puede ser lo que quieres.

Puede descargar mi archivo pbix de prueba aquí

Si este resultado no es el que desea, puede explicar su lógica en detalle y compartir el resultado esperado.

Cómo obtener respuestas rápidamente a su pregunta

¡Muchas gracias!

Saludos

Equipo de soporte comunitario _Robert Qin

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

View solution in original post

7 REPLIES 7
Syndicate_Admin
Administrator
Administrator

Hola, @jthomson

De acuerdo con su descripción y explicación con ejemplos, puedo entender más o menos su requisito, desea obtener la suma acumulada del grupo [cambio de valor] por [Número de caso] y darles el último valor que es menor que [CostLimit] cuando están por encima del valor de [CostLimit], ¿verdad?

Si es así, puedes probar mis pasos:

Creo estas columnas calculadas, utilicé columnas calculadas para lograr esto porque las medidas no son adecuadas para el cálculo en función de las últimas filas.

CumulativeSum =
CALCULATE(
SUM('Table'[ValueChange]),
FILTER(ALLSELECTED('Table'),
[CaseNumber]=EARLIER([CaseNumber])&&
[TransactionDate]<=EARLIER([TransactionDate])))
Index =

RANKX(FILTER(ALLSELECTED('Table'),[CaseNumber]=EARLIER('Table'[CaseNumber])),[TransactionDate],,ASC,Dense)
Output =
var _lastindex=
CALCULATE(
MAX('Table'[Index]),
FILTER(ALL('Table'),
[CaseNumber]=EARLIER([CaseNumber])&&
[CumulativeSum]<=EARLIER([CostLimit])&&
[Index]<=EARLIER([Index])))
var _lastvalue=
CALCULATE(
MAX('Table'[CumulativeSum]),
FILTER(ALL('Table'),
[CaseNumber]=EARLIER([CaseNumber])&&
[Index]=_lastindex))
return
IF([CumulativeSum]>[CostLimit],_lastvalue,0)

Ésta es la salida de estas columnas calculadas en la tabla:

v-robertq-msft_0-1614328656257.png

Luego creé un gráfico de tablas y lo puse así:

v-robertq-msft_1-1614328656269.png

Y supongo que esto puede ser lo que quieres.

Puede descargar mi archivo pbix de prueba aquí

Si este resultado no es el que desea, puede explicar su lógica en detalle y compartir el resultado esperado.

Cómo obtener respuestas rápidamente a su pregunta

¡Muchas gracias!

Saludos

Equipo de soporte comunitario _Robert Qin

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Hola

Eso parece más cerca, podría tomar un poco de tiempo para validar lo que está mostrando (no estoy seguro de que esté funcionando completamente como se pretende dado que, por ejemplo, la entrada 4 debería mostrar 200 después de que la suma acumulada alcanza los 700, y está mostrando 100), pero parece prometedor. Dicho esto, estoy probando una tabla de resumen en su lugar, que debería ser capaz de conseguir trabajar un poco más fácil, ya que sería sólo un caso de hacer una relación y restar el valor relacionado. Voy a tomar nota de lo que has hecho y volver a ella si es necesario, vítores

Hola, @jthomson

Bien, sólo respórame si aún tienes un problema.

¡Gracias de antemano!

Cómo obtener respuestas rápidamente a su pregunta

Saludos

Equipo de soporte comunitario _Robert Qin

Si este post ayuda, entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Syndicate_Admin
Administrator
Administrator

He intentado eso, y no está funcionando como se pretendía en absoluto, después de haberlo probado en un conjunto de datos donde el CostLimit es el mismo para cada caso y nunca se supera una vez - sólo quita el límite de costos, haciendo algo similar que en este post de Greg:

https://community.powerbi.com/t5/DAX-Commands-and-Tips/Dealing-with-Measure-Totals/td-p/63376

No quiero que solo calcula la suma acumulada para todo el conjunto de datos y luego quitar el valor más alto del límite de costos, que es lo que hace la medida que ha sugerido. Dicho esto, no puedo simplemente portar directamente en cualquier cosa que Greg haya sugerido (por ejemplo, simplemente usar SUMX), ya que necesito el cálculo para ejecutarse caso por caso y no línea por línea (y respetar los filtros de fecha que la suma acumulada utiliza al mismo tiempo)

Syndicate_Admin
Administrator
Administrator

@jthomson Creo que lo estamos haciendo súper complicado, pero en caso de que quieras volver 0 cuando sea negativo, puedes envolver tu medida alrededor de la función MIN

Diff = 
VAR _diff = MAX ( Table[Cost Limit] ) - [Your Cummulative Measure]
RETURN
MIN ( _diff, 0 )

Consulta mi última entrada de blog Improve UX: Show Year in Legend When Using Time Intelligence Measures | PeryTUS IT Solutions me gustaría ❤ Kudos si mi solución ayudara. 👉 Si usted puede pasar tiempo publicando la pregunta, también puede hacer esfuerzos para dar Felicitaciones a quien ayudó a resolver su problema. ¡Es una muestra de aprecio!

Visítenos en https://perytus.com, su tienda integral para proyectos/formación/consultoría relacionados con Power BI.

Syndicate_Admin
Administrator
Administrator


@parry2k escribió:

@jthomson intentar la siguiente medida:

Difference Cost Limit = 
MAX ( Table[Cost Limit] ) - [Your Cummulative Measure]

Creo que quería decir eso como [mi medida acumulativa] - max(table[Cost Limit]), pero en cualquier caso no estoy seguro de que vaya a funcionar, probablemente cayendo en un tema de "por qué mi fila de totales no funciona como quiero". Bien podría ser la forma en que he dicho la pregunta con justicia. Si simplifico los datos y es así:

CaseNumberValueChangeTransactionDateCostLimit
1200022/02/20211000
2200022/02/20211000
3200022/02/20211000
450022/02/20211000

Al mirar los datos en su conjunto, necesito que devuelvan 3000 - Estoy pensando que la medida que usted proporciona averiguaría que mi medida acumulativa está mostrando 6500, pero luego sólo restar 1000. Del mismo modo, si los casos 1, 2 y 3 de esa tabla anterior tuvieran ValueChange de solo 500, necesitaría que el resultado final fuera 0, no -1000.

Syndicate_Admin
Administrator
Administrator

@jthomson intentar la siguiente medida:

Difference Cost Limit = 
MAX ( Table[Cost Limit] ) - [Your Cummulative Measure]

Consulta mi última entrada de blog Improve UX: Show Year in Legend When Using Time Intelligence Measures | PeryTUS IT Solutions me gustaría ❤ Kudos si mi solución ayudara. 👉 Si usted puede pasar tiempo publicando la pregunta, también puede hacer esfuerzos para dar Felicitaciones a quien ayudó a resolver su problema. ¡Es una muestra de aprecio!

Visítenos en https://perytus.com, su tienda integral para proyectos/formación/consultoría relacionados con Power BI.

Helpful resources

Announcements
April AMA free

Microsoft Fabric AMA Livestream

Join us Tuesday, April 09, 9:00 – 10:00 AM PST for a live, expert-led Q&A session on all things Microsoft Fabric!

March Fabric Community Update

Fabric Community Update - March 2024

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

Top Solution Authors