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

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
v-alq-msft
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
v-alq-msft
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.

MFelix
Super User
Super User

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



Anonymous
Not applicable

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



Anonymous
Not applicable

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
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.

Top Kudoed Authors