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?
Solved! Go to Solution.
Hola, @EylesIT
Basándome en su desription, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.
AccountActivity:
Transacciones:
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:
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.
Hola, @EylesIT
Basándome en su desription, creé datos para reproducir su escenario. El archivo pbix se adjunta al final.
AccountActivity:
Transacciones:
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:
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.
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
Proud to be a Super User!
Check out my blog: Power BI em PortuguêsFlag1 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
Proud to be a Super User!
Check out my blog: Power BI em PortuguêsAquí 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:
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
User | Count |
---|---|
7 | |
3 | |
1 | |
1 | |
1 |
User | Count |
---|---|
2 | |
2 | |
1 | |
1 | |
1 |