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

COLUMNA SUM basada en dos filtros diferentes para el mismo ID único

Registramos nuestros códigos promocionales para la membresía y nuestras compras de membresía reales como líneas de pedido separadas en la tabla de llamada "Actividad". No hay ninguna relación entre las dos líneas de pedido, excepto que ambas se registran bajo el mismo identificador de miembro THRU_DATE Product_Code. Tengo un código que crea una medida para tirar de MAX 'SEQN' para 'ACTIVITY_TYPE' DUES y DUESOFFER para asegurarse de que estamos agarrando la transacción de oferta de cuotas y cuotas más reciente para un miembro. Datos de muestra a continuación:

IdLAST_NAMEFirst_namePRODUCT_CODEACTIVITY_TYPETHRU_DATETRANSACTION_DATEUF_1CantidadSEQNLatestDUESOFFER_SEQNLatestDUES_SEQN
9E-08NonyaNegocioAbcDUESOFFER9/30/2021 0:009/20/2020 0:00Vgabf2020$012324051232405
9E-08NonyaNegocioABC-1YRCuotas9/30/2021 0:009/20/2020 0:00Aprobado$491232404 1232404
9E-08NonyaNegocioABC-1YRCuotas8/31/2020 0:008/1/2019 0:00Aprobado$431123159
9E-08NonyaNegocioAbcDUESOFFER7/31/2019 0:007/6/2018 0:00WOODBOOK$0969559
9E-08NonyaNegocioABC-1YRCuotas7/31/2019 0:007/6/2018 0:00Aprobado$43969557

Mi objetivo es calcular los ingresos totales de un código de promoción determinado que ejecutamos. Por lo tanto, los resultados esperados de los datos de la muestra anteriores es DuesOfferRevenue de $49. Hemos detectado un problema desconocido.

DuesOfferRevenue = 

VAR LatestDuesOfferID =
IF(NOT(ISBLANK('Activity'[LatestDUESOFFER_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), "NoDuesOffer")

VAR LatestDuesID =
IF(NOT(ISBLANK('Activity'[LatestDUES_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), "NoDues")

RETURN IF(LatestDuesID = LatestDuesOfferID, SUMX(Activity, Activity[AMOUNT]), BLANK())

Cualquier orientación sería muy apreciada.

Salud
Ryan

1 ACCEPTED SOLUTION
Anonymous
Not applicable

¿No está seguro de si mi explicación fue pobre o es un problema difícil de resolver en PowerBI? Pero esto estaba tomando demasiado tiempo y había una ruta más simple a una solución fuera de PowerBI. Mi solución fue crear la relación Dues y DuesOffer en SQL. Después de la consulta SQL me dio el DUES a DUESOFFER relación de registro que estaba buscando y luego importado en PowerBI mediante la consulta SQL personalizada como tabla 'DuesOffer2Dues'. A continuación, se creó una relación en el modelo de PowerBI entre la tabla 'DuesOffer2Dues' y 'Activity' mediante la tabla DuesOffer2Dues.D-SEQN - Activity.SEQN.

SELECT DUES.ID, DUES.ACTIVITY_TYPE AS 'D-ACTIVITY_TYPE', DUES.SEQN AS 'D-SEQN',
	   DUESOFFER.ACTIVITY_TYPE AS 'DO-ACTIVITY_TYPE', DUESOFFER.SEQN AS 'DO-SEQN'
FROM
       (SELECT ID, ACTIVITY_TYPE, MAX(SEQN) AS SEQN
        FROM	Activity a 
        WHERE	ACTIVITY_TYPE = 'DUESOFFER' AND UF_1 = 'Vgabf2020'
		GROUP BY ID, ACTIVITY_TYPE
		) AS DUESOFFER
LEFT JOIN
       (SELECT ID, ACTIVITY_TYPE, MAX(SEQN) AS SEQN
        FROM       Activity a
        WHERE      ACTIVITY_TYPE = 'DUES'
		GROUP BY ID, ACTIVITY_TYPE
        ) AS DUES ON DUESOFFER.ID = DUES.ID

View solution in original post

5 REPLIES 5
v-deddai1-msft
Community Support
Community Support

Hola @rlatham ,

Por favor, explique más acerca de la lógica de 49 como ingresos totales para un código de promoción determinado en su ejemplo. No entendí cuál es su necesidad por su descripción.

Saludos

Dedmon Dai

Anonymous
Not applicable

Hola @v-deddai1-msft ,

Disculpas por faltar a Mark la primera vez. Trataré de explicar mejor el resultado de $49 aquí. Los datos no son geniales, y hay dos problemas que necesito resolver. Problema 1) Identifique la actividad relevante "DUESOFFER" y "DUES" para cada ID de miembro. He hecho esto creando dos medidas. Cada uno extrae el número SEQN máximo para cada respectivo ("DUESOFFER" y "DUES") ACTIVITY_TYPE por ID que tiene un THRU_DATE > Hoy. Estas dos medidas se encuentran en los datos de muestra siguientes, LatestDUESOFFER_SEQN y LatestDUES_SEQN. Problema que estoy tratando de resolver en este post 2) Suma la CANTIDAD para la última actividad "DUES" (LatestDUES_SEQN es "1232404" en los datos de muestra) donde el LatestDUESOFFER_SEQN correspondiente no es nulo y tiene una UF_1 "Vgabf2020". No puedo sumar en el registro "DUESOFFER" AMOUNT, porque se registra como un valor de $0. Necesito sumar en el registro de LatestDUES_SEQN ("1232404" en los datos de muestra) AMOUNT. He reordenado los datos de ejemplo con el SEQN, LatestDUESOFFER_SEQN y LatestDUES_SEQN, ya que esto podría tener más sentido.

SEQNLatestDUESOFFER_SEQNLatestDUES_SEQNIdLAST_NAMEFirst_namePRODUCT_CODEACTIVITY_TYPETHRU_DATETRANSACTION_DATEUF_1Cantidad
12324051232405 900263805NonyaNegocioAbcDUESOFFER9/30/2021 0:009/20/2020 0:00Vgabf2020$0
1232404 1232404900263805NonyaNegocioABC-1YRCuotas9/30/2021 0:009/20/2020 0:00Aprobado$49
1123159 900263805NonyaNegocioABC-1YRCuotas8/31/2020 0:008/1/2019 0:00Aprobado$43
969559 900263805NonyaNegocioAbcDUESOFFER7/31/2019 0:007/6/2018 0:00WOODBOOK$0
969557 900263805NonyaNegocioABC-1YRCuotas7/31/2019 0:007/6/2018 0:00Aprobado$43

Hola @rlatham ,

¿Podrías probar la siguiente medida?

DuesOfferRevenue = 
VAR LatestDuesOfferID =
IF(NOT(ISBLANK('Activity'[LatestDUESOFFER_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), "NoDuesOffer")

VAR LatestDuesID =
IF(NOT(ISBLANK('Activity'[LatestDUES_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), "NoDues")

RETURN IF(LatestDuesID = LatestDuesOfferID, SUMX(FILTER(ALL(Activity),Activity[SEQN] = LatestDuesID), Activity[AMOUNT]), BLANK())

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

Saludos

Dedmon Dai

Anonymous
Not applicable

Hola @v-deddai1-msft ,

Gracias por proporcionar el siguiente código. Tuve que editar los valores devueltos falsos para cada instrucción IF, ya que esta fórmula estaba dando:

" Error de cálculo en la medida 'Actividad'[DuesOfferRevenue]: las operaciones de comparación DAX no admiten la comparación de valores de tipo Entero con valores de tipo Text. Considere la posibilidad de utilizar la función VALUE o FORMAT para convertir uno de los valores."

Esto es lo que cambié a, pero todavía vuelve en blanco.

DuesOfferRevenue = 
VAR LatestDuesOfferID =
IF(NOT(ISBLANK('Activity'[LatestDUESOFFER_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), 01)

VAR LatestDuesID =
IF(NOT(ISBLANK('Activity'[LatestDUES_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), 02)

RETURN IF(LatestDuesID = LatestDuesOfferID, SUMX(FILTER(ALL(Activity),Activity[SEQN] = LatestDuesID), Activity[AMOUNT]), BLANK())

¿No necesitaría LatestDuesID para igualar Activity[ID] en el FILTER? Algo así como:

DuesOffer Revenue = 
VAR LatestDuesOfferID = IF(NOT(ISBLANK('Activity'[LatestDUESOFFER_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), 01) 
VAR LatestDuesID = IF(NOT(ISBLANK('Activity'[LatestDUES_SEQN])), SELECTEDVALUE ( 'Activity'[ID] ), 02) 

RETURN IF(LatestDuesID = LatestDuesOfferID, SUMX(FILTER(ALL(Activity), [ID] = LatestDuesID), Activity[AMOUNT]), BLANK())

Esto también devuelve en blanco, aunque cuando lo ejecuto.

Apreciamos mucho su ayuda, si usted tiene alguna otra idea por favor no dude en compartir.

Gracias
Ryan

Anonymous
Not applicable

¿No está seguro de si mi explicación fue pobre o es un problema difícil de resolver en PowerBI? Pero esto estaba tomando demasiado tiempo y había una ruta más simple a una solución fuera de PowerBI. Mi solución fue crear la relación Dues y DuesOffer en SQL. Después de la consulta SQL me dio el DUES a DUESOFFER relación de registro que estaba buscando y luego importado en PowerBI mediante la consulta SQL personalizada como tabla 'DuesOffer2Dues'. A continuación, se creó una relación en el modelo de PowerBI entre la tabla 'DuesOffer2Dues' y 'Activity' mediante la tabla DuesOffer2Dues.D-SEQN - Activity.SEQN.

SELECT DUES.ID, DUES.ACTIVITY_TYPE AS 'D-ACTIVITY_TYPE', DUES.SEQN AS 'D-SEQN',
	   DUESOFFER.ACTIVITY_TYPE AS 'DO-ACTIVITY_TYPE', DUESOFFER.SEQN AS 'DO-SEQN'
FROM
       (SELECT ID, ACTIVITY_TYPE, MAX(SEQN) AS SEQN
        FROM	Activity a 
        WHERE	ACTIVITY_TYPE = 'DUESOFFER' AND UF_1 = 'Vgabf2020'
		GROUP BY ID, ACTIVITY_TYPE
		) AS DUESOFFER
LEFT JOIN
       (SELECT ID, ACTIVITY_TYPE, MAX(SEQN) AS SEQN
        FROM       Activity a
        WHERE      ACTIVITY_TYPE = 'DUES'
		GROUP BY ID, ACTIVITY_TYPE
        ) AS DUES ON DUESOFFER.ID = DUES.ID

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.