Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
6 years ago

Utilice CALCULATE() sin usar expression

Hola gente 🙂
En primer lugar, aquí está mi archivo PBI: test2

Tengo un pequeño problema en una tabla calculada que he creado.
Mi tabla estándar sigue esta estructura:

BacalaoFechaNivel
0012/01/2020M
0012/03/20201H
1112/03/20201H
1112/05/2020A
1112/05/2020A

Como puede ver, en la columna COD los registros se pueden repetir y la columna DATE puede tener fechas diferentes para el mismo COD.
Me gustaría crear una tabla calculada que muestre todos los COD distintos y más recientes, y su respectivo NIVEL.
Basándose en la tabla de ejemplo anterior, la nueva tabla sería algo así:

BacalaoFechaNivel
0012/03/20201H
1112/05/2020A

Con esta tabla calculada, puedo obtener todos los COD distintos y más recientes:

_newTable = SUMMARIZE('table'; 'table'[COD]; "LEVEL"; CALCULATE(MAX('table'[LEVEL]); ALLEXCEPT('table';'table'[COD])); "MAX VALUE"; CALCULATE(MAX('table'[DATE]);ALLEXCEPT('table';'table'[COD])))

El único problema en esta tabla calculada es que la columna LEVEL no muestra el NIVEL real para ese COD y esa FECHA. Muestra el carácter de orden más alto en la escala alfabética y lo asocia con el COD más reciente. Descubrí que el problema está en esa parte del código:

"LEVEL", CALCULATE(MAX('table'[LEVEL])

Esto trae la letra más alta de ese COD específico en la escala alfabética (si el mismo COD tiene NIVEL A, B y Z, siempre mostrará la letra Z). Un ejemplo de esto es analizar el COD 40501455 (en el archivo .pbix). El NIVEL más reciente de este COD es 1D, pero el _newTable muestra H porque H está por encima de un NIVEL que comienza con un número en la escala alfabética.
Pero si simplemente elimino este MAX del código, señala un error de sintaxis.
ÂżPuede alguien ayudarme, por favor?



3 Replies

  • Vvelarde's avatar
    Vvelarde
    Icon for Community Champion rankCommunity Champion

    @req7

    Hola, intente crear esta tabla DAX:

    ResultTable =
    SUMMARIZECOLUMNS (
        Table1[COD];
        "MAX"; MAX ( 'Table1'[Date] );
        "LEVEL"; CALCULATE (
            VALUES ( Table1[LEVEL] );
            FILTER ( Table1; Table1[DATE] = MAX ( Table1[DATE] ) )
        )
    )

    saludos

    Victor

  • @req7 ,

    Trate como

    filter(SUMMARIZE('table'; 'table'[COD]; 'table'[LEVEL]; 'table'[DATE],"max_dt"CALCULATE(MAX('table'[DATE]);ALLEXCEPT('table';'table'[COD])))
    ,[DATE]=[max_dt])
    • Anonymous's avatar
      Anonymous
      Not applicable

      Muchas gracias @amitchandak !!!!!
      ¡Esto es exactamente lo que quiero!