Forum Discussion

9 Replies

  • @Sarutra ,

    El problema del "total incorrecto" en las medidas de Power BI es muy común y suele producirse porque DAX calcula el total de forma diferente a las filas individuales. Así es como lo abordaría:

    Usar SUMX sobre VALUES: Esto garantiza que su cálculo personalizado se ejecute a nivel de fila para cada factura única (o cualquiera que sea su campo clave) y luego suma todo para el total. Por ejemplo:

    Unpaid Amount = 
    SUMX(
        VALUES('sales payments'[Invoice NR]),
        [Open Order Total] - [Payments]
    )
    
    

    Agregue lógica HASONEVALUE si es necesario: si el cálculo necesita controlar las filas individuales y los totales de forma diferente, puede usar HASONEVALUE para cambiar la lógica, como se muestra a continuación:

    Unpaid Amount = 
    IF(
        HASONEVALUE('sales payments'[Invoice NR]),
        [Open Order Total] - [Payments],
        SUMX(
            VALUES('sales payments'[Invoice NR]),
            [Open Order Total] - [Payments]
        )
    )
    
    

    Asegúrese de que sus tablas estén unidas correctamente y que no haya relaciones inactivas que puedan estropear los totales. A veces, crear una tabla rápida con SUMMARIZE o mirar un objeto visual de tabla puede ayudar a detectar por qué los totales están desactivados. Si aún no funciona, no dude en compartir un archivo PBIX de muestra con datos ficticios. A veces es algo pequeño que es fácil de detectar con un ejemplo real.






    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      No es tan simple. Adjunto la fórmula de la medida.

      Importe impagado =
      VAR BalanceToPay = [Total de la orden abierta] -- Último saldo pendiente

      VAR Total en marcha =
      CALCULAR(
      SUMA('Pagos de ventas'[Débito]),
      FILTRO(
      TODOS SELECCIONADOS('Pagos de ventas'),
      'Pagos de ventas'[Código de cliente] = SELECTEDVALUE('Pagos de ventas'[Código de cliente]) &&
      'Pagos de ventas'[Índice] >= MÁXIMO('Pagos de ventas'[Índice])
      )
      )

      VAR Cantidad restante =
      SI(
      BalanceToPay - Total en marcha >= 0,
      MÁXIMO('Pagos de ventas'[Débito]),
      SI(
      BalanceToPay - (Total en marcha - MÁXIMO('Pagos de ventas'[Débito])) > 0,
      BalanceToPay - (Total en marcha - MÁXIMO('Pagos de ventas'[Débito])),
      0
      )
      )

      DEVOLUCIÓN
      SI(
      HASONEVALUE('Pagos de ventas'[N.º de factura]),
      SI(Cantidad restante > 0, Cantidad restante, ESPACIO EN BLANCO()),
      SUMX(
      FILTRO(
      TODOS SELECCIONADOS('Pagos de ventas'),
      'Pagos de ventas'[Código de cliente] = SELECTEDVALUE('Pagos de ventas'[Código de cliente])
      ),
      SI(
      BalanceToPay -
      CALCULAR(
      SUMA('Pagos de ventas'[Débito]),
      FILTRO(
      TODOS SELECCIONADOS('Pagos de ventas'),
      'Pagos de ventas'[Código de cliente] = SELECTEDVALUE('Pagos de ventas'[Código de cliente]) &&
      'Pagos de ventas'[Índice] >= ANTERIOR('Pagos de ventas'[Índice])
      )
      ) >= 0,
      'Pagos de ventas'[Débito],
      SI(
      BalanceToPay -
      CALCULAR(
      SUMA('Pagos de ventas'[Débito]),
      FILTRO(
      TODOS SELECCIONADOS('Pagos de ventas'),
      'Pagos de ventas'[Código de cliente] = SELECTEDVALUE('Pagos de ventas'[Código de cliente]) &&
      'Pagos de ventas'[Índice] >= ANTERIOR('Pagos de ventas'[Índice])
      )
      ) - 'Pagos de ventas'[Débito] > 0,
      BalanceToPay -
      CALCULAR(
      SUMA('Pagos de ventas'[Débito]),
      FILTRO(
      TODOS SELECCIONADOS('Pagos de ventas'),
      'Pagos de ventas'[Código de cliente] = SELECTEDVALUE('Pagos de ventas'[Código de cliente]) &&
      'Pagos de ventas'[Índice] <= ANTERIOR('Pagos de ventas'[Índice])
      )
      ),
      0
      )
      )
      )
      )
  • Hola

    Yo creé esta medida

    Measure = if(ISBLANK([Unpaid Amount]),BLANK(),SUMX(VALUES('sales-payments'[Indeksas]),[Unpaid Amount]))

    Espero que esto ayude.

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        En la captura de pantalla, como puedes ver, obtengo el resultado correcto.