Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
Anonymous
Not applicable

Filtrar cambios en filas

Tengo datos de Salesforce de informes que se ejecutan semanalmente. Quiero obtener una serie de filas que han mostrado cualquier cambio desde la semana anterior.

Datos de muestra:

ID de oportunidadRepresentante de VentasEtapaIngresosCantidadFecha del informe
12345Xyz3$15002006/12/2020
45678Abc2$12001156/12/2020
45678Abc2$12001156/5/2020
12345Xyz1$15002006/5/2020

Quiero tirar de la fila de la Oportunidad 12345 donde la fecha del informe es 6/12/2020 porque su etapa cambió de 1 a 3 sobre las dos fechas del informe. Sé que tendré que escribir una expresión con múltiples cheques, pero tengo problemas para averiguar el primer cheque. Asistencia muy apreciada!

1 ACCEPTED SOLUTION
sturlaws
Resident Rockstar
Resident Rockstar

Hola @arnster

si un Id. de oportunidad solo tiene valores crecientes o iguales para la etapa, lo que significa que no irá, por ejemplo, de la etapa 3 a la etapa 2, puede escribir una columna calculada como esta:

Has changed =
CALCULATE (
    MAX ( 'Table'[Stage] ),
    FILTER (
        ALL ( 'Table' ),
        'Table'[Opportunity ID] = EARLIER ( 'Table'[Opportunity ID] )
            && 'Table'[Report Date] < EARLIER ( 'Table'[Report Date] )
            && 'Table'[Stage] <> EARLIER ( 'Table'[Stage] )
    )
)

Si no, podrías escribirlo así:

Changed since last update =
VAR _oid =
    CALCULATE ( SELECTEDVALUE ( 'Table'[Opportunity ID] ) )
VAR _currentDate =
    CALCULATE ( SELECTEDVALUE ( 'Table'[Report Date] ) )
VAR _prevDate =
    CALCULATE (
        MAX ( 'Table'[Report Date] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Opportunity ID] = _oid
                && 'Table'[Report Date] < _currentDate
        )
    )
VAR _currentStage =
    CALCULATE ( SELECTEDVALUE ( 'Table'[Stage] ) )
VAR _prevStage =
    CALCULATE (
        VALUES ( 'Table'[Stage] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Opportunity ID] = _oid
                && 'Table'[Report Date] = _prevDate
        )
    )
RETURN
    IF ( _currentStage <> _prevStage && NOT ( ISBLANK ( _prevstage ) ), 1, 0 )

Salud

Sturla



Si este post ayuda, por favor considere Aceptarlo como la solución. Los elogios también son agradables.

View solution in original post

9 REPLIES 9
sturlaws
Resident Rockstar
Resident Rockstar

Hola @arnster

si un Id. de oportunidad solo tiene valores crecientes o iguales para la etapa, lo que significa que no irá, por ejemplo, de la etapa 3 a la etapa 2, puede escribir una columna calculada como esta:

Has changed =
CALCULATE (
    MAX ( 'Table'[Stage] ),
    FILTER (
        ALL ( 'Table' ),
        'Table'[Opportunity ID] = EARLIER ( 'Table'[Opportunity ID] )
            && 'Table'[Report Date] < EARLIER ( 'Table'[Report Date] )
            && 'Table'[Stage] <> EARLIER ( 'Table'[Stage] )
    )
)

Si no, podrías escribirlo así:

Changed since last update =
VAR _oid =
    CALCULATE ( SELECTEDVALUE ( 'Table'[Opportunity ID] ) )
VAR _currentDate =
    CALCULATE ( SELECTEDVALUE ( 'Table'[Report Date] ) )
VAR _prevDate =
    CALCULATE (
        MAX ( 'Table'[Report Date] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Opportunity ID] = _oid
                && 'Table'[Report Date] < _currentDate
        )
    )
VAR _currentStage =
    CALCULATE ( SELECTEDVALUE ( 'Table'[Stage] ) )
VAR _prevStage =
    CALCULATE (
        VALUES ( 'Table'[Stage] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Opportunity ID] = _oid
                && 'Table'[Report Date] = _prevDate
        )
    )
RETURN
    IF ( _currentStage <> _prevStage && NOT ( ISBLANK ( _prevstage ) ), 1, 0 )

Salud

Sturla



Si este post ayuda, por favor considere Aceptarlo como la solución. Los elogios también son agradables.

Anonymous
Not applicable

@sturlawsmuchas gracias por la respuesta! Estoy tratando de envolver mi cabeza alrededor de él. Parece que está poniendo el escenario actualizado en la fila vieja, ¿correcto? Para algo como la cantidad de pedido, entonces tendría que usar la segunda versión, ya que la cantidad puede cambiar a menor o mayor, ¿verdad? I've estado haciendo DAX para un par de semanas ahora, y este es el problema más complejo I've correr en tan lejos.

Es un poco detallado, estoy de acuerdo, pero escribirlo así hace bastante fácil entender lo que está sucediendo en el código.

Al ser una columna calculada, el código dax se evalúa fila por fila:

_oid mantendrá el valor de identificador de oportunidad de la fila que está evaluando

_currentDate mantendrá la fecha del informe de la fila que está evaluando

Con las columnas calculadas, la fila que se evalúa es el contexto, pero es posible modificar este contexto.

En _prevDate queremos encontrar la fecha del informe anterior en relación con la fila que se evalúa. Así que en la parte del filtro del cálculo estamos usando la función ALL, que elimina todos los filtros en la tabla. Y luego aplicar nuestro propio filtro, con el identificador de oportunidad - _oid y la fecha del informe < _currentDate (estamos cambiando el contexto). Máximo de la fecha del informe, a continuación, devuelve la fecha de la entrada anterior para este identificador de oportunidad.

_currentStage es la etapa de la fila que se está evaluando

_prevStage se evalúa de forma similar a la prevDate, utilizando ALL para quitar filtros o cambiar el contexto y estableciendo el contexto en _oid y _prevDate.

Y luego es sólo una cuestión de comprobar si la etapa actual es diferente de la etapa anterior.

Anonymous
Not applicable

@sturlaws Lamento molestarle con un montón de respuestas, pero si tiene el tiempo, me gustaría agradecer enormemente sus comentarios sobre un pequeño problema que ha surgido. Estoy extendiendo la solución que escribió anteriormente a nuevos campos, y estoy obteniendo un resultado inesperado. Quiero realizar un seguimiento de los cambios de ingresos dentro del mismo proyecto:

ID de oportunidadCantidadFecha del informe
12345100006/12/2020
1234550006/5/2020
1234550005/28/2020

He escrito la misma fórmula que usted sugirió, excepto que cambié la VUELTA para ser

RETURN
    IF ( _currentAmount <> _prevAmount, 1, 0 )

Esperaría obtener una nueva mesa con 1 en la primera fila y 0s en los dos últimos. En su lugar, obtengo:

ID de oportunidadCantidadFecha del informeamount_change
12345100006/12/20201
1234550006/5/20200
1234550005/28/20201

5/28/2020 no tiene fecha de informe anterior, así que ¿por qué lanza un 1 para amount_change?

Una vez más, muchas gracias por toda su ayuda hasta ahora.

Creo que olvidaste esta parte de la declaración if:

&& NOT ( ISBLANK ( _prevstage ) )
Anonymous
Not applicable

@sturlaws Había dejado esa parte fuera como nuestros representantes de ventas a veces no llenan completamente los campos en Salesforce, lo que significa que una oportunidad puede tener una etapa en blanco cuando se crea por primera vez. Si incluyo la cláusula NOT ISBLANK, ¿será problemático para tales Oportunidades?

Haría una transformación en Power Query, cambiando de etapa a por ejemplo -1 si está en blanco

Anonymous
Not applicable

@sturlawstiene sentido para mí. muchas gracias por su ayuda! Que tengas un gran día

Anonymous
Not applicable

@sturlaws Muchas gracias por la explicación detallada; Te lo agradezco mucho. Usaré esta solución y la escribiré para tener en cuenta otras columnas que pueden cambiar.

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.