Earn the coveted Fabric Analytics Engineer certification. 100% off your exam for a limited time only!
No conseguimos encontrar tu ubicación exacta.
Tengo un hecho y tablas de dimensiones como abajo.
ClienteNo | SalesOrganization | Canal | CreditLimit |
1 | A | X | 500 |
1 | C | Z | 500 |
2 | A | Y | 200 |
2 | B | Z | 200 |
3 | B | Z | 50 |
4 | C | X | 100 |
4 | A | Z | 100 |
ClienteNo | SalesOrganization | Canal |
1 | A | X |
2 | B | Y |
3 | B | Z |
4 | C | Z |
Se unieron dos tablas en CustomerNo y estoy usando SalesOrganization y Channel from dimension table.
Quiero crear i medida en CreditLimit y devuelve;
Suma de CreditLimit pero solo 1 vez por cliente (850). (podemos suponer que un cliente solo tiene un límite de crédito)
SI se selecciona 1 en Filtro CustomerNo (500)
SI se selecciona A del filtro SalesOrganization (700)
SI selecciona Z del filtro de canal (150)
En resumen, quiero que no agregue el límite de crédito para aquellos que tienen el mismo número de cliente
En realidad no sé qué función dax debo usar.
Estoy esperando tu ayuda.
Solved! Go to Solution.
Hola @alsasloren ,
Podemos intentar utilizar la siguiente medida para satisfacer su requirmenet:
Measure =
SWITCH (
TRUE (),
ISFILTERED ( 'dimension'[Channel] ), SUMX (
DISTINCT ( 'dimension'[Channel] ),
CALCULATE (
SUM ( 'fact'[CreditLimit] ),
FILTER (
CALCULATETABLE ( 'fact', ALL ( 'dimension' ) ),
'fact'[Channel] = EARLIER ( 'dimension'[Channel] )
&& 'fact'[CustomerNo]
IN CALCULATETABLE (
DISTINCT ( 'dimension'[CustomerNo] ),
'dimension'[Channel] = EARLIER ( 'dimension'[Channel] )
)
)
)
),
ISFILTERED ( 'dimension'[SalesOrganization] ), SUMX (
DISTINCT ( 'dimension'[SalesOrganization] ),
CALCULATE (
SUM ( 'fact'[CreditLimit] ),
FILTER (
CALCULATETABLE ( 'fact', ALL ( 'dimension' ) ),
'fact'[SalesOrganization] = EARLIER ( 'dimension'[SalesOrganization] )
&& 'fact'[CustomerNo]
IN CALCULATETABLE (
DISTINCT ( 'dimension'[CustomerNo] ),
'dimension'[SalesOrganization] = EARLIER ( 'dimension'[SalesOrganization] )
)
)
)
),
SUMX (
DISTINCT ( 'dimension'[CustomerNo] ),
VAR No = [CustomerNo]
RETURN
CALCULATE (
SUM ( 'fact'[CreditLimit] ),
FILTER (
CALCULATETABLE ( 'fact', ALL ( 'dimension' ) ),
'fact'[CustomerNo] = EARLIER ( 'dimension'[CustomerNo] )
&& 'fact'[SalesOrganization]
IN CALCULATETABLE (
DISTINCT ( 'dimension'[SalesOrganization] ),
'dimension'[CustomerNo] = No
)
)
)
)
)
Por cierto, pbIX archivo como adjunto.
Saludos
Hola @alsasloren ,
Lo sentimos, pero no podemos entender la lógica de cálculo de"SI seleccionado A del filtro SalesOrganization (700)", Cuando SalesOrganization a A, el cliente 1 & 2 & 4 cuenta, por lo que el resultado debe ser 800, ¿podría compartir la lógica por qué el cliente 4 no cuenta?
Parte de la medida para el filtro SalesOrganization:
Measure =
IF (
ISFILTERED ( 'dimension'[Channel] ),
CALCULATE (
SUM ( 'fact'[CreditLimit] ),
FILTER (
CALCULATETABLE ( 'fact', ALL ( 'dimension' ) ),
'fact'[Channel] IN DISTINCT ( 'dimension'[Channel] )
&& 'fact'[CustomerNo] IN DISTINCT ( 'dimension'[CustomerNo] )
)
),-1
)
Por cierto, pbIX archivo como adjunto.
Saludos
@v-lid-msft
Lamento su malentendido. Es mi culpa.
Déjame decirte el scenerio otra vez.
En primer lugar, estaba calculando mal el caso"SI seleccionado A del filtro SalesOrganization (700)"
Debe ser 500 porque estoy usando el filtro SalesOrganization de la tabla de dimensiones. Coincide solo con CustomerNo 1. Entonces el límite de crédito CustomerNo 1 es 500.
En realidad sólo quiero dar un ejemplo para los casos de selección de filtros.
Quiero crear una página que contenga todos los campos de filtro de la tabla de dimensiones.
Entonces quiero hacer la selección desde el filtro. Si selecciono un cliente, debe ser la devolución del límite de crédito del cliente. Si selecciono SalesOrganization o Channel, debe ser la suma de devolución del límite de crédito de los clientes.
Para ver ejemplos.
Si selecciono el cliente 1 --> 500
Si selecciono SalesOrg A --> 500, SalesOrg B --> 250, SalesOrg C --> 100, SalesOrg A-B Combine --> 750, SalesOrg A-C Combine 600
Si selecciono Canal X --> 500, Canal Y --> 200, Canal Z --> 150, Combinación de Canal X-Y --> 700, Combinación de Canal Y-Z 350
Si no hay selección de los filtros 850
Me revisaron tu ejemplo de pbix. Devuelve siempre:1 para las selecciones CustomerNo y SalesOrganization. Eso está mal para mi lógica. Debe calcular CreditLimit para todas las dimensiones.
Agregué su pbix de nuevo con la mirada que quiero que sea
Enlace
Espero que haya sido descriptivo y comprensible. Tu ayuda es muy valiosa para mí
Hola @alsasloren ,
Podemos intentar utilizar la siguiente medida para satisfacer su requirmenet:
Measure =
SWITCH (
TRUE (),
ISFILTERED ( 'dimension'[Channel] ), SUMX (
DISTINCT ( 'dimension'[Channel] ),
CALCULATE (
SUM ( 'fact'[CreditLimit] ),
FILTER (
CALCULATETABLE ( 'fact', ALL ( 'dimension' ) ),
'fact'[Channel] = EARLIER ( 'dimension'[Channel] )
&& 'fact'[CustomerNo]
IN CALCULATETABLE (
DISTINCT ( 'dimension'[CustomerNo] ),
'dimension'[Channel] = EARLIER ( 'dimension'[Channel] )
)
)
)
),
ISFILTERED ( 'dimension'[SalesOrganization] ), SUMX (
DISTINCT ( 'dimension'[SalesOrganization] ),
CALCULATE (
SUM ( 'fact'[CreditLimit] ),
FILTER (
CALCULATETABLE ( 'fact', ALL ( 'dimension' ) ),
'fact'[SalesOrganization] = EARLIER ( 'dimension'[SalesOrganization] )
&& 'fact'[CustomerNo]
IN CALCULATETABLE (
DISTINCT ( 'dimension'[CustomerNo] ),
'dimension'[SalesOrganization] = EARLIER ( 'dimension'[SalesOrganization] )
)
)
)
),
SUMX (
DISTINCT ( 'dimension'[CustomerNo] ),
VAR No = [CustomerNo]
RETURN
CALCULATE (
SUM ( 'fact'[CreditLimit] ),
FILTER (
CALCULATETABLE ( 'fact', ALL ( 'dimension' ) ),
'fact'[CustomerNo] = EARLIER ( 'dimension'[CustomerNo] )
&& 'fact'[SalesOrganization]
IN CALCULATETABLE (
DISTINCT ( 'dimension'[SalesOrganization] ),
'dimension'[CustomerNo] = No
)
)
)
)
)
Por cierto, pbIX archivo como adjunto.
Saludos
trabajando bien. Muchas gracias