Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Administrator
1 year ago

DAX

Necesitamos proporcionar rango. La lógica de la clasificación es que siempre que tenga un valor "Producto", debe comenzar con el nuevo número y todos los demás a continuación deben seguir el mismo rango. Compruebe la entrada de muestra y la salida esperada. Por favor, proporcióneme o ayúdeme con el DAX para usar

4 Replies

  • Para crear una clasificación basada en la columna "Producto" según la lógica de Power BI, donde se inicia una nueva clasificación cada vez que aparece "Producto", puede usar una fórmula DAX para generar esta clasificación personalizada.

    A continuación, se muestra un enfoque de ejemplo:

    Datos de muestra (entrada):

    Producto de fila

    1A
    2
    3
    4B
    5
    6C
    7

    Resultado esperado:

    Rango de producto de fila

    1A1
    2 1
    3 1
    4B2
    5 2
    6C3
    7 3

    Solución DAX:

    1. Cree una columna calculada en la tabla con esta fórmula DAX:
    DAX
    Copiar código
    Rango = VAR CurrentRow = Tabla[Fila] VAR ProductCheck = Tabla[Producto] RETURN IF( NOT(ISBLANK(ProductCheck)), RANKX(FILTER(Tabla, Tabla[Fila] <= CurrentRow && NOT(ISBLANK(Tabla[Producto]))), Tabla[Fila], , ASC), CALCULATE( MAXX(FILTER(Tabla, Tabla[Fila] < CurrentRow & NOT(ISBLANK(Tabla[Producto]))), RANKX(FILTER(Tabla, Tabla[Fila] <= CurrentRow && NOT(ISBLANK(Tabla[Producto]))), Tabla[Fila], , ASC)) ) )

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Administrator

      Por favor, escriba el DAx de una manera y la salida después de escribir esto es por favor ayude a @123abc

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Administrator

        Puedo ver que está tratando de asignar una clasificación a los valores en la columna "Vals". El requisito es restablecer el rango cada vez que aparezca una entrada de "Producto". Proporcionaré un enfoque DAX más detallado y organizado para lograr esto.

        A continuación, se muestra una guía paso a paso para escribir la medida DAX para este caso:

        Solución DAX para la clasificación personalizada

        1. Cree una columna calculada con la siguiente fórmula DAX:

        Rango =
        VAR CurrentRow = Tabla[ID]
        VAR IsProduct = Tabla[Vals] = "Producto"
        DEVOLUCIÓN
        SI(


        IsProduct,


        RANKX(
        FILTER(Tabla, Tabla[ID] <= CurrentRow && Table[Vals] = "Producto"),
        Tabla[ID],
        ASC
        ),
        CALCULAR(
        MAXX(
        FILTER(Tabla, Tabla[ID] < CurrentRow && Table[Vals] = "Producto"),
        RANKX(FILTER(Tabla, Tabla[ID] <= CurrentRow && Table[Vals] = "Producto"), Tabla[ID], , ASC)
        )
        )
        )

        Explicación:

        • CurrentRow: Contiene el valor del "ID" de la fila actual.
        • IsProduct: Comprueba si la fila actual tiene el valor "Producto" en la columna "Vals".
        • Si la condición:
          • Si la fila actual contiene "Producto", genera un nuevo rango usando RANKX().
          • Para las filas que no contienen "Producto", asigna el rango del "Producto" más reciente por encima de la fila actual.
        • Salida esperada basada en la imagen:

          ID Rango de Vals
          1Producto1
          2Leche1
          3Mantequilla1
          4Queso1
          5Yogur1
          6Producto2
          7Muesli2
          8Gachas2
          9Producto3
          10Plátano3

        • Este enfoque debe generar la salida esperada, donde cada "Producto" comienza un nuevo rango, y todos los demás valores por debajo de él siguen el mismo rango hasta que aparece un nuevo "Producto".

        • ¡Avísame si esto resuelve el problema!



  • Gracias por la preocupación de 123abc sobre este tema.

    Hola, @yashkumarbhatia

    Estaré encantado de ayudarte.

    Según su descripción, necesita una clasificación de los datos que siempre que tenga un valor "Producto", debe comenzar el nuevo número y todos los demás a continuación deben seguir el mismo rango.


    Tal vez pueda consultar mi DAX.
    Nueva columna en Power BI Desktop:

    RNK = 
    VAR CurrentRow = Table1[ID]
    VAR RNKVal = 
        CALCULATE(
            COUNTROWS(Table1),
            FILTER(
                Table1,
                Table1[ID] <= CurrentRow && Table1[Vals] = "Product"
            )
        )
    RETURN RNKVal


    Aquí está el resultado:


    He adjuntado el archivo pbix correspondiente a continuación, espero que te ayude.

    Espero que mis sugerencias le den buenas ideas, si tiene más preguntas, aclare en una respuesta de seguimiento.
    Saludos
    Fen Ling,
    Si esta publicación ayuda, considere Acéptalo como la solución para ayudar a los demás miembros a encontrarlo más rápidamente.