Forum Discussion
Problema RANK Condicionado
Estoy intentando calcular la clasificación de una agencia usando la fórmula RANKX, pero no puedo resolverlo.
Lo que estoy intentando hacer es que el ranking se calcule teniendo en cuenta la inversión de cada agencia, pero esto no puede considerar agencias con YoY negativo, hay que excluirlas del ranking. Solo quiero un ranking de Agencias que tengan una variación % positiva (2023 vs 2024).
Estoy usando la siguiente fórmula pero sin mucho éxito.
RANKX Agencia 1 Pos =
VAR InversionYTD = [Inversión neta YTD Agencia]
VAR VariacionYTD = [Variación YTD Agencia]
RETURN
IF(
NOT ISBLANK(InversionYTD) && InversionYTD <> 0 && VariacionYTD > 0,
RANKX(
FILTER(
ALLSELECTED('Industria'[Agencia]),
[Variación YTD Agencia] > 0
),
CALCULATE(
[Inversión neta YTD Agencia],
REMOVEFILTERS('Industria'[Anunciante]), -- Delete filters of advertiser column
),
,
DESC,
Dense
),
BLANK()
)
El resultado esperado sería un objeto visual matricial como el de la imagen.
Resultado esperado
| Anunciante | Agencia | 2023 | 2024 | Diff | YoY | Rankx |
| TECNOQUIMICAS | SANCHO/BBDO | $ 364,529 | $ 435,109 | $ 70,580 | 19% | 1 |
| CENTRAL CERVECERA | SANCHO/BBDO | $ 180 | $ 32,094 | $ 31,915 | 17744% | 1 |
| PEPSI COL+POSTOBON | SANCHO/BBDO | $ 3,856 | $ 20,385 | $ 16,529 | 429% | 1 |
| ALMACENES EXITO | SANCHO/BBDO | $ 65,194 | $ 79,979 | $ 14,785 | 23% | 1 |
| BANCOLOMBIA | SANCHO/BBDO | $ 45,218 | $ 59,528 | $ 14,309 | 32% | 1 |
| ALIMENTOS POLAR | SANCHO/BBDO | $ 14,610 | $ 26,580 | $ 11,970 | 82% | 1 |
| MERCADOLIBRE.COM | SANCHO/BBDO | $ 14,966 | $ 24,951 | $ 9,986 | 67% | 1 |
| PEPSICO ALIMENTOS | SANCHO/BBDO | $ 11,078 | $ 17,517 | $ 6,439 | 58% | 1 |
| ECOPETROL | SANCHO/BBDO | $ 8,340 | $ 12,604 | $ 4,264 | 51% | 1 |
| LEADERS+CEET | SANCHO/BBDO | $ 2,234 | $ 5,461 | $ 3,226 | 144% | 1 |
| C FUNCIONAL BEBIDAS | SANCHO/BBDO | $ 965 | $ 3,937 | $ 2,972 | 308% | 1 |
| DAIMLER COLOMBIA SA | SANCHO/BBDO | $ 2,167 | $ 5,033 | $ 2,865 | 132% | 1 |
| TERPEL | SANCHO/BBDO | $ 1,763 | $ 4,196 | $ 2,433 | 138% | 1 |
| AVON CALLINGS | SANCHO/BBDO | $ 268 | $ 1,493 | $ 1,225 | 456% | 1 |
| ARTURO CALLE | SANCHO/BBDO | $ 301 | $ 1,380 | $ 1,079 | 359% | 1 |
| CORONA | SANCHO/BBDO | $ 2,397 | $ 2,782 | $ 385 | 16% | 1 |
| L&C S.A.S | SANCHO/BBDO | $ 892 | $ 1,238 | $ 346 | 39% | 1 |
| PJ COL SAS | SANCHO/BBDO | $ 478 | $ 812 | $ 334 | 70% | 1 |
| ALM EXITO+B COLPAT | SANCHO/BBDO | $ 83 | $ 230 | $ 147 | 176% | 1 |
| COLGATE PALMOLIVE | YOUNG & RUBICAM | $ 159,954 | $ 257,348 | $ 97,394 | 61% | 2 |
| COLGATE PALMOLIV INT | YOUNG & RUBICAM | $ 9,363 | $ 31,787 | $ 22,424 | 240% | 2 |
| HUAWEI TECHNOLOGIES | YOUNG & RUBICAM | $ 541 | $ 3,313 | $ 2,772 | 512% | 2 |
| DERCO SA | YOUNG & RUBICAM | $ 3,175 | $ 4,147 | $ 972 | 31% | 2 |
| WALT DISNEY COMPANY | BTL | $ 145,513 | $ 254,319 | $ 108,806 | 75% | 3 |
Esta fue la solución
RANKX Agencia 1 Pos =RANKX(FILTER(ADDCOLUMNS(SUMMARIZE(ALL(Industria[Agencia], Industria[Anunciante]), -- Trabajar a nivel de Agencia y AnuncianteIndustria[Agencia],Industria[Anunciante]),"VariacionAgenciaTotal",CALCULATE([Variación YTD Agencia],REMOVEFILTERS(Industria[Anunciante]) -- Evalúa la variación al nivel de Agencia),"ExcluirAnunciante",IF(CALCULATE([Variación YTD Agencia],REMOVEFILTERS(Industria[Anunciante])) > 0,FALSE(), -- No excluir si la Agencia tiene Variación PositivaTRUE() -- Excluir si la Agencia tiene Variación Negativa)),[ExcluirAnunciante] = FALSE() -- Filtra solo Anunciantes de Agencias con Variación Positiva),CALCULATE([Inversión neta YTD Agencia],REMOVEFILTERS(Industria[Anunciante]) -- Ranking basado en la inversión total de la Agencia),,DESC,DENSE)
3 Replies
- Syndicate_AdminAdministrator
@Syndicate_Admin , cree una medida por separado en caso de que desee eliminar el filtro y obtener el subtotal
y luego, en esa medida, tienen un rango como
Rankx(allselected(Tabla[Anunciante], Tabla[Agencia]), [Medir])
En caso de que tenga columnas en la tabla, use resumir, exmple
Clasificación en tablas de dimensiones: https://youtu.be/X59qp5gfQoA
Considere la posibilidad de crear un nuevo rango de función, si es necesario
Power BI - Nueva función DAX: RANK - En qué se diferencia de RANKX: https://youtu.be/TjGkF44VtDo
- mlozanoHelper III
Vale, consegui esta fomula que me da el resultado correcto
RANKX Agencia 1 Pos =
RANKX(
SUMMARIZE(
ALLSELECTED(Industria),
Industria[Anunciante],
Industria[Agencia]),
CALCULATE([Inversión neta YTD Agencia],
REMOVEFILTERS(Industria[Anunciante]))
,
,
DESC,
Dense
)
Ahora necesito excluir las Agencias con YoY Negativo, no deben aparecer en el ranking, e intentdo algo com
RANKX Agencia 1 Pos =
RANKX(
FILTER(
SUMMARIZE(
ALLSELECTED(Industria),
Industria[Anunciante],
Industria[Agencia],
"InversionTotal", CALCULATE([Inversión neta YTD Agencia], REMOVEFILTERS(Industria[Anunciante])),
"VariacionTotal", CALCULATE([Variación YTD Agencia], REMOVEFILTERS(Industria[Anunciante]))
),
[VariacionTotal] > 0 -- Incluye solo agencias con variación positiva
),
CALCULATE([Inversión neta YTD Agencia], REMOVEFILTERS(Industria[Anunciante])),
,
DESC,
DENSE
)
Pero el resultado es blank
- mlozanoHelper III
Esta fue la solución
RANKX Agencia 1 Pos =RANKX(FILTER(ADDCOLUMNS(SUMMARIZE(ALL(Industria[Agencia], Industria[Anunciante]), -- Trabajar a nivel de Agencia y AnuncianteIndustria[Agencia],Industria[Anunciante]),"VariacionAgenciaTotal",CALCULATE([Variación YTD Agencia],REMOVEFILTERS(Industria[Anunciante]) -- Evalúa la variación al nivel de Agencia),"ExcluirAnunciante",IF(CALCULATE([Variación YTD Agencia],REMOVEFILTERS(Industria[Anunciante])) > 0,FALSE(), -- No excluir si la Agencia tiene Variación PositivaTRUE() -- Excluir si la Agencia tiene Variación Negativa)),[ExcluirAnunciante] = FALSE() -- Filtra solo Anunciantes de Agencias con Variación Positiva),CALCULATE([Inversión neta YTD Agencia],REMOVEFILTERS(Industria[Anunciante]) -- Ranking basado en la inversión total de la Agencia),,DESC,DENSE)