Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
Hola
Tenga el siguiente conjunto de datos:
CaseNumber | ValueChange | TransactionDate | CostLimit |
1 | 100 | 01/01/2021 | 500 |
1 | 200 | 02/01/2021 | 500 |
2 | 100 | 03/01/2021 | 1000 |
3 | 200 | 04/01/2021 | 1000 |
3 | 100 | 05/01/2021 | 1000 |
1 | 500 | 06/01/2021 | 500 |
2 | 1000 | 07/01/2021 | 1000 |
4 | 100 | 08/01/2021 | 500 |
5 | 250 | 09/01/2021 | 1000 |
1 | -400 | 10/01/2021 | 500 |
2 | -500 | 11/01/2021 | 1000 |
3 | 200 | 12/01/2021 | 1000 |
6 | 100 | 13/01/2021 | 1000 |
7 | 250 | 14/01/2021 | 500 |
8 | 420 | 15/01/2021 | 500 |
9 | 69 | 16/01/2021 | 1000 |
10 | 400 | 17/01/2021 | 1000 |
4 | 600 | 18/01/2021 | 500 |
5 | 100 | 19/01/2021 | 1000 |
11 | 50 | 20/01/2021 | 500 |
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?
Solved! Go to Solution.
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:
Luego creé un gráfico de tablas y lo puse así:
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, @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:
Luego creé un gráfico de tablas y lo puse así:
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.
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)
@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.⚡
@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í:
CaseNumber | ValueChange | TransactionDate | CostLimit |
1 | 2000 | 22/02/2021 | 1000 |
2 | 2000 | 22/02/2021 | 1000 |
3 | 2000 | 22/02/2021 | 1000 |
4 | 500 | 22/02/2021 | 1000 |
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.
@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.⚡