Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.
Hola a todos
Estoy intentando replicar esta lógica en Power BI. Tengo una columna "Tarifas" donde me gustaría sumar los valores en ella cuando la condición 'Banco' es Sí (Y). Pero cuando se cumple la condición quiero que sume 'Tarifas' para los meses anteriores cada vez que se cumple la condición.
En el Excel de arriba verá la celda E4 - SUM (C2: C4) para el Fondo 1. Así que, básicamente, en cada ocurrencia de Banked -"Y" entonces SUMA los valores de los meses anteriores.
¿Hay alguna manera de hacerlo en DAX o Power Query? Intenté esto, pero obviamente sólo trae el valor de nuevo para ese mes donde 'Banked' es Sí, por ejemplo, CALCULATE(SUM(Table1[FEES]), FILTER(Table1, Table1[BANKED] - "Y")) trae el valor FEES solo para ese mes.
Apreciamos a cualquiera que pueda ayudar.
saludos
Solved! Go to Solution.
Esta es una medida mucho más simple que funciona en todas las circunstancias:
Measure =
var __tableToIterateOver =
filter(
'Table',
'Table'[BANKED] = "Y"
)
var __amount =
SUMX(
__tableToIterateOver,
var __currentDate = 'Table'[Date]
var __result =
calculate(
var __prevDateOfBankedStatus =
CALCULATE(
MAX( 'Table'[Date] ),
'Table'[BANKED] = "Y",
'Table'[Date] < __currentDate
)
var __output =
CALCULATE(
SUM( 'Table'[FEES] ),
__prevDateOfBankedStatus < 'Table'[Date],
'Table'[Date] <= __currentDate
)
return
__output,
// Leave only the filter on Fund.
ALLEXCEPT( 'Table', 'Table'[Fund] )
)
return
__result
)
return
__amount
Mejor
D
Hola
¿Es justo decir que cada vez que hay una Y en la columna bancaria, debemos sumar las cifras en la columna de honorarios de los 3 meses terminados la fecha de la fila actual
Hola @Ashish_Mathur Sí que es correcto, pero puede ser para cualquier cantidad de meses.
@v-kelly-msft He intentado una variación de esto antes de publicar también, pero obtener el siguiente resultado:
Como puede ver, obtengo el total equivocado - el último valor debe ser 3 595 699 y no 1 453 554.
Esta es una medida mucho más simple que funciona en todas las circunstancias:
Measure =
var __tableToIterateOver =
filter(
'Table',
'Table'[BANKED] = "Y"
)
var __amount =
SUMX(
__tableToIterateOver,
var __currentDate = 'Table'[Date]
var __result =
calculate(
var __prevDateOfBankedStatus =
CALCULATE(
MAX( 'Table'[Date] ),
'Table'[BANKED] = "Y",
'Table'[Date] < __currentDate
)
var __output =
CALCULATE(
SUM( 'Table'[FEES] ),
__prevDateOfBankedStatus < 'Table'[Date],
'Table'[Date] <= __currentDate
)
return
__output,
// Leave only the filter on Fund.
ALLEXCEPT( 'Table', 'Table'[Fund] )
)
return
__result
)
return
__amount
Mejor
D
Hola @darlove muchas gracias por publicar su medida, sin embargo, no obtenga las cifras correctas que vienen a través como se ve a continuación:
su medida trae el total que es grande, pero no está sumando las tarifas en cuanto a lo que obtengo de la otra medida publicada por @v-kelly-msft . Lo estoy mirando más cerca para averiguarlo también
Parece que mi post anterior no pasó por @darlove -
Me perdí el signo de "a" en su medida publicada:
Su medida me da las cifras correctas:
Gracias por toda su ayuda! Muy apreciado
Fareed
@darlove gracias agradezco su opinión. He estado implementando conceptos similares al escribir mi código.
@v-kelly-msft también apreciamos su opinión, gracias de nuevo.
Salud
Fareed
Hola @Fareed86 ,
1. Vaya al editor de consultas > agregar columna> columna de índice; (La columna se utilizará para el cálculo)
2. A continuación, cree una medida como se muestra a continuación:
Measure =
VAR a =
FILTER (
ALLSELECTED ( 'Table' ),
'Table'[Date] <= MAX ( 'Table'[Date] )
&& 'Table'[FUND] = SELECTEDVALUE ( 'Table'[FUND] )
)
VAR b =
CALCULATE (
COUNTROWS ( 'Table' ),
FILTER (
ALL ( 'Table' ),
'Table'[BANKED] = "Y"
&& 'Table'[FUND] = MAX ( 'Table'[FUND] )
)
)
VAR _mindate =
CALCULATE (
MAXX ( ALLSELECTED ( 'Table' ), 'Table'[Date] ),
FILTER (
ALL ( 'Table' ),
'Table'[Index] < MAX ( 'Table'[Index] )
&& 'Table'[BANKED] = "Y"
&& 'Table'[FUND] = SELECTEDVALUE ( 'Table'[FUND] )
)
)
VAR _multisum =
SUMX (
FILTER (
ALL ( 'Table' ),
'Table'[Date] <= MAX ( 'Table'[Date] )
&& 'Table'[Date] > _mindate
&& 'Table'[FUND] = SELECTEDVALUE ( 'Table'[FUND] )
&& 'Table'[BANKED] = "N"
),
'Table'[FEES]
)
RETURN
IF (
MAX ( 'Table'[BANKED] ) = "Y",
IF (
b = 1,
SUMX ( a, 'Table'[FEES] ),
IF ( b > 1, _multisum + MAX ( 'Table'[FEES] ), BLANK () )
)
)
Finalmente verá:
Para el archivo .pbix relacionado, haga clic aquí.
@v-kelly-msft Tuve una buena relación calidad-precio en esto y todo funciona, gracias. Pero no entiendo la demostración Total, sólo cuenta en el contexto de la fila.
Hice algunas excavaciones y sé que hay problemas a veces con Medida Totales, y encontré este enlace https://community.powerbi.com/t5/Quick-Measures-Gallery/Measure-Totals-The-Final-Word/td-p/547907/
Ayudó hasta cierto punto, pero todavía no obtengo el Total correcto, como se puede ver:
¿Alguna idea? El total debe ser de 21.733.910
@v-kelly-msft Wow, eso es increíble. Muchas gracias.
No habría pensado que sería este complejo para lograr en Power BI. Voy a diseccionar esto para entender completamente lo que está pasando.
Una cosa que noté es que el Total de la Medida no aparece en la parte inferior. ¿Hay alguna razón por la que eso suceda?
¡Gracias de nuevo!
Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City
Check out the April 2024 Power BI update to learn about new features.
User | Count |
---|---|
1 | |
1 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
1 | |
1 | |
1 |