cancel
Showing results for 
Search instead for 
Did you mean: 
Reply
Post Patron
Post Patron

Cómo hacer el equivalente de WHERE EXISTS de T-SQL en DAX

Tengo una tabla de hechos Sales y una tabla de hechos AccountActivity. Ventas y AccountActicity tienen relaciones con una dimensión de cuenta compartida. Tengo una medida que calcula las ventas

Sales = SUM('Sales'[Sales Amount])

Ahora quiero una nueva medida Sales2 que calcule Sales, pero solo para las cuentas que han tenido Flag1 >0 (de hecho, tabla AccountActivity) en el período de filtro. Lo intenté

Sales = CALCULATE([Sales], 'AccountActivity'[Flag1] > 0)

pero esto da los mismos valores que [Ventas]. ¿Cómo puedo lograrlo?

En SQL, usaría la cláusula WHERE EXISTS para limitar la consulta Sales a solo las cuentas que cumplían la condición de Flag1. Así que probé esta medida a continuación. Primero obtengo una lista distinta de números de cuenta en una variable. Luego utilizo CALCULATE pasando la variable como filtro. Pero esto no funciona y da el mismo número que antes.

Sales2 =
VAR _ActWithFlag = SUMMARIZE(FILTER('AccountActivity','AccountActivity'[Flag1] > 0), 'AccountActivity'[AccountNo])
RETURN CALCULATE([Sales], _ActWithFlag)

¿Alguna sugerencia?

1 ACCEPTED SOLUTION
Community Support
Community Support

Hola, @EylesIT

Basándome en su desription, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

AccountActivity:

a1.png

Transacciones:

a2.png

Puede crear una tabla calculada como se muestra a continuación.

Table = 
FILTER(
    SUMMARIZE(
        Transactions,
        Transactions[AccountNo],
        Transactions[TxMonth],
        "Sum",
        SUM(Transactions[TxAmt])
    ),
    SUMX(
        FILTER(
            ALL(AccountActivity),
            [AccountNo]=EARLIER(Transactions[AccountNo])&&
            [ActivityMonth]=EARLIER(Transactions[TxMonth])
        ),
        AccountActivity[Flag1]
    )>0
)

Resultado:

a3.png

Saludos

Allan

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

View solution in original post

5 REPLIES 5
Community Support
Community Support

Hola, @EylesIT

Basándome en su desription, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.

AccountActivity:

a1.png

Transacciones:

a2.png

Puede crear una tabla calculada como se muestra a continuación.

Table = 
FILTER(
    SUMMARIZE(
        Transactions,
        Transactions[AccountNo],
        Transactions[TxMonth],
        "Sum",
        SUM(Transactions[TxAmt])
    ),
    SUMX(
        FILTER(
            ALL(AccountActivity),
            [AccountNo]=EARLIER(Transactions[AccountNo])&&
            [ActivityMonth]=EARLIER(Transactions[TxMonth])
        ),
        AccountActivity[Flag1]
    )>0
)

Resultado:

a3.png

Saludos

Allan

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

View solution in original post

Super User III
Super User III

Hola @EylesIT ,

¿Su 'AccountActivity'[Flag1] es un número o una columna de texto?

También tenga en cuenta que las medidas se basan en el contexto, por lo que si tiene filtros, segmentaciones de datos, columnas o cualquier otro tipo de información que pueda influir en el resultado y en lugar de realizar un filtro directo a la tabla debe hacer un ALL o ALLSELECTED.


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog:

Power BI em Português





Flag1 es entero. La condición que estoy buscando es Flag1 > 0.

Hola @EylesIT ,

Pruebe el siguiente código:

Sales2 =
VAR _ActWithFlag = SUMMARIZE(FILTER('AccountActivity','AccountActivity'[Flag1] > 0), 'AccountActivity'[AccountNo], "@Sales", [Sales])
RETURN SUMX(_ActWithFlag, [@Sales])

Si esto no funciona, puede compartir por favor un dato de maqueta o muestra de su archivo PBIX y el resultado esperado. Puede utilizar un onedrive, google drive, que transferimos o enlace similar para cargar sus archivos.

Si la información es confidencial, compártala a través de un mensaje privado.


Regards

Miguel Félix


Did I answer your question? Mark my post as a solution!

Proud to be a Super User!

Check out my blog:

Power BI em Português





Aquí hay algunos datos de prueba

DROP TABLE IF EXISTS #transactions
CREATE TABLE #transactions(AccountNo VARCHAR(10), TxDate DATE, TxMonth VARCHAR(10), TxType VARCHAR(10), TxAmt NUMERIC(10,2))

insert #Transactions select 'ABC','2020-01-01','2020-01','Sale',101
insert #Transactions select 'ABC','2020-01-07','2020-01','Refund',513
insert #Transactions select 'ABC','2020-01-14','2020-01','Sale',183
insert #Transactions select 'ABCD','2020-01-02','2020-01','Sale',201
insert #Transactions select 'ABCD','2020-01-21','2020-01','Sale',724
insert #Transactions select 'ABCD','2020-01-25','2020-01','Interest',184
insert #Transactions select 'ABC','2020-02-02','2020-02','Sale',8126
insert #Transactions select 'ABC','2020-02-07','2020-02','Sale',652
insert #Transactions select 'ABC','2020-02-08','2020-02','Sale',13
insert #Transactions select 'ABCD','2020-02-15','2020-02','Interest',356
insert #Transactions select 'ABCD','2020-02-22','2020-02','Sale',124
insert #Transactions select 'ABCD','2020-02-26','2020-02','Sale',245


DROP TABLE IF EXISTS #accountactivity 
CREATE TABLE #accountactivity(AccountNo VARCHAR(10), ActivityDate DATE, ActivityMonth VARCHAR(10), Flag1 INT)
insert #accountactivity select 'ABC','2020-01-01','2020-01',0
insert #accountactivity select 'ABC','2020-01-02','2020-01',0
insert #accountactivity select 'ABC','2020-01-03','2020-01',0
insert #accountactivity select 'ABC','2020-01-04','2020-01',0
insert #accountactivity select 'ABC','2020-01-05','2020-01',0
insert #accountactivity select 'ABC','2020-01-06','2020-01',0
insert #accountactivity select 'ABC','2020-01-07','2020-01',0
insert #accountactivity select 'ABCD','2020-01-01','2020-01',0
insert #accountactivity select 'ABCD','2020-01-02','2020-01',0
insert #accountactivity select 'ABCD','2020-01-03','2020-01',0
insert #accountactivity select 'ABCD','2020-01-04','2020-01',5
insert #accountactivity select 'ABCD','2020-01-05','2020-01',0
insert #accountactivity select 'ABCD','2020-01-06','2020-01',0
insert #accountactivity select 'ABCD','2020-01-07','2020-01',0
insert #accountactivity select 'ABC','2020-02-01','2020-02',0
insert #accountactivity select 'ABC','2020-02-02','2020-02',0
insert #accountactivity select 'ABC','2020-02-03','2020-02',0
insert #accountactivity select 'ABC','2020-02-04','2020-02',1
insert #accountactivity select 'ABC','2020-02-05','2020-02',0
insert #accountactivity select 'ABC','2020-02-06','2020-02',0
insert #accountactivity select 'ABC','2020-02-07','2020-02',0
insert #accountactivity select 'ABCD','2020-02-01','2020-02',0
insert #accountactivity select 'ABCD','2020-02-02','2020-02',0
insert #accountactivity select 'ABCD','2020-02-03','2020-02',0
insert #accountactivity select 'ABCD','2020-02-04','2020-02',0
insert #accountactivity select 'ABCD','2020-02-05','2020-02',0
insert #accountactivity select 'ABCD','2020-02-06','2020-02',0
insert #accountactivity select 'ABCD','2020-02-07','2020-02',0

SELECT	t.AccountNo
		,t.TxMonth
		,SUM(t.TxAmt) AS Sales
FROM	#transactions AS t
WHERE	t.TxType = 'Sale'
AND	EXISTS(SELECT 1 FROM #accountactivity AS a WHERE a.AccountNo = t.AccountNo AND t.TxMonth = a.ActivityMonth AND a.Flag1 > 0)
GROUP BY t.AccountNo, t.TxMonth

Este SQL da los resultados correctos:

EylesIT_0-1601493043381.png

Cargo estos datos de prueba en Power BI y creo la medida y los dejo caer en un objeto visual de tabla.

Sales With Flag1 GT 0 = 
VAR _AcInArr = SUMMARIZE(
        FILTER('AccountActivity', AccountActivity[Flag1] > 0)
        , 'AccountActivity'[AccountNo]
        , "@Sales", [Sales]
    )
    RETURN
        SUMX(_AcInArr, [@Sales])

pero esto no devuelve nada

EylesIT_1-1601493579381.png

Helpful resources

Announcements
secondImage

Happy New Year from Power BI

This is a must watch for a message from Power BI!

December Update

Check it Out!

Click here to read more about the December 2020 Updates!

Community Blog

Check it Out!

Click here to read the latest blog and learn more about contributing to the Power BI blog!

Get Ready for Power BI Dev Camp

Get Ready for Power BI Dev Camp

Mark your calendars and join us for our next Power BI Dev Camp!.

Top Solution Authors