Forum Discussion

Anonymous's avatar
Anonymous
Not applicable
5 years ago
Solved

Problema de Dax

Hola a todos
En esta captura de pantalla se inicia el pedido del cliente y el éxito del pago está en el mismo txn id que queremos que se complete la transacción o de lo contrario el cliente es solo el pedido iniciado que queremos que el pago falle.

txn_oid 10 < order_initiated

txn_oid 10 y Payment_success

txn_oid 2 y order_initiated

queremos txn_oid 10o completado

queremos txn_oid 2 - pago fallido

En este éxito de pago o fracaso queremos nueva columna, así que por favor me ordena

Muthuvel_s_0-1610477756145.png

  • Hola,@Muthuvel_s

    De acuerdo con su descripción, creo que puede crear una columna para calcular el resultado deseado, así:

    Column =
    VAR a =
        CALCULATETABLE (
            DISTINCT ( 'Table'[TXN-OID] ),
            FILTER ( ALL ( 'Table' ), [TXN-STATUS] = "ORDER_INITIATED" )
        )
    VAR c =
        CALCULATETABLE (
            DISTINCT ( 'Table'[TXN-OID] ),
            FILTER ( ALL ( 'Table' ), [TXN-STATUS] = "PAYMENT_SUCCESS" )
        )
    RETURN
        IF ( [TXN-OID] IN a && [TXN-OID] IN c, "completed", "payment failed" )

    O:

    Column 2 =
    VAR a =
        COUNTROWS (
            FILTER (
                'Table',
                [TXN-OID] = EARLIER ( 'Table'[TXN-OID] )
                    && [TXN-STATUS] = "ORDER_INITIATED"
            )
        )
    VAR b =
        COUNTROWS (
            FILTER (
                'Table',
                [TXN-OID] = EARLIER ( 'Table'[TXN-OID] )
                    && [TXN-STATUS] = "PAYMENT_SUCCESS"
            )
        )
    RETURN
        IF ( b > 0 && a > 0, "completed", "payment failed" )

    4.png

    Si no resuelve su problema, por favor no dude en preguntarme.

    Saludos

    Janey Guo

    Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

4 Replies

  • Suponiendo que la tabla se denomina 'Transacciones', podría usar una expresión como la siguiente para encontrar el número máximo de fecha y hora actualizada y, a continuación, buscar el estado

    Payment Status = 
    var txnOid = [TXN_OID]
    var maxDate = 
        MAXX( 
            FILTER(ALL(Transactions[TXN_OID], Transactions[STATUS_UPDATE_DATETIME]), 
                    Transactions[TXN_OID] = txnOid)
        , Transactions[STATUS_UPDATE_DATETIME])
    var lastStatus = LOOKUPVALUE(Transactions[TXN_STATUS]
        , Transactions[TXN_OID] , txnOid
        , Transactions[STATUS_UPDATE_DATETIME], maxDate)
    return if( lastStatus = "PAYMENT_SUCCESSFUL", "completed", "payment failed")
    • Anonymous's avatar
      Anonymous
      Not applicable

      Estoy probando este dax. pero estoy desajustando algún error

      Muthuvel_s_0-1610509337715.png

  • Hmm, en una suposición que probablemente significa que tiene al menos 1 TXN_OID que tiene varias filas con el mismo valor de status_update_datetime.

    Puede evitarlo haciendo lo siguiente y simplemente comprobando si una de esas filas contiene un estado "PAYMENT_SUCCESSFUL"

    Payment Status = 
    var txnOid = [TXN_OID]
    var maxDate = MAXX( FILTER(ALL(Transactions[TXN_OID], Transactions[STATUS_UPDATE_DATETIME]), Transactions[TXN_OID] = txnOid), Transactions[STATUS_UPDATE_DATETIME])
    var lastStatus = COUNTROWS(FILTER(Transactions, Transactions[TXN_STATUS] = "PAYMENT_SUCCESSFUL" && Transactions[TXN_OID] && txnOid && Transactions[STATUS_UPDATE_DATETIME] = maxDate))
    return if( lastStatus >= 1 , "completed", "payment failed")
  • Hola,@Muthuvel_s

    De acuerdo con su descripción, creo que puede crear una columna para calcular el resultado deseado, así:

    Column =
    VAR a =
        CALCULATETABLE (
            DISTINCT ( 'Table'[TXN-OID] ),
            FILTER ( ALL ( 'Table' ), [TXN-STATUS] = "ORDER_INITIATED" )
        )
    VAR c =
        CALCULATETABLE (
            DISTINCT ( 'Table'[TXN-OID] ),
            FILTER ( ALL ( 'Table' ), [TXN-STATUS] = "PAYMENT_SUCCESS" )
        )
    RETURN
        IF ( [TXN-OID] IN a && [TXN-OID] IN c, "completed", "payment failed" )

    O:

    Column 2 =
    VAR a =
        COUNTROWS (
            FILTER (
                'Table',
                [TXN-OID] = EARLIER ( 'Table'[TXN-OID] )
                    && [TXN-STATUS] = "ORDER_INITIATED"
            )
        )
    VAR b =
        COUNTROWS (
            FILTER (
                'Table',
                [TXN-OID] = EARLIER ( 'Table'[TXN-OID] )
                    && [TXN-STATUS] = "PAYMENT_SUCCESS"
            )
        )
    RETURN
        IF ( b > 0 && a > 0, "completed", "payment failed" )

    4.png

    Si no resuelve su problema, por favor no dude en preguntarme.

    Saludos

    Janey Guo

    Si este post ayuda,entonces considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.