Cómo Indicar Varios Argumentos en la Función FILTER (Operador IN)
Es posible que te haya sucedido: Deseas crear un cálculo mediante una expresión que aplique para un elemento A o elemento B de una columna concreta en una tabla de datos, aunque, cuando vamos a la carga ocurre un desliz al cerciorarnos que la función FILTER solo admite una condición lógica.
– Vamos a clarificarlo.
Por ejemplo toma como dada la siguiente tabla:
Lo que se necesita es crear una medida que sume solo los Id Cliente: 3 o 4 en independientemente de la matriz, tabla dinámica, gráfico, objeto visual, etc. Cortamente, desvinculado del «contexto».
Para suprimir cualquier vestigio de duda, procedamos a crear una Tarjeta
Queremos mostrar en el valor de dicha tarjeta la cantidad total, pero ojo, únicamente para los Id cliente 3. La forma que probablemente te llego a la cabeaz es invocando a La Reina de las funciones: CALCULATE, claro escoltada (o no) por la función FILTER.
- La expresión DAX que brinda a solución sin escolta es como sigue:
Cantidad Id 3 =
CALCULATE ( SUM ( Datos[Cantidad] ); IdCliente = 3 )
- Utilizando un iterador:
Cantidad Id 3X =
SUMX ( FILTER ( Datos; Datos[Id Cliente] = 3 ); Datos[Cantidad] )
Vamos a enfocarnos en este artículo en la solución con CALCULATE.
Hasta el momento todo bien. Ahora extendamos el problema: Mostrar en el valor de dicha tarjeta la cantidad total, para los Id cliente que 3 o 4
Un Pequeño Test
Es bien sabido que la función CALCULATE soporta un número indeterminado de argumentos y que apartir del segundo argumentos corresponden a filtros
«!» Nota: Los argumentos de filtros se pueden pensar como condiciones lógicas, ya sabes del tipo: Datos[Cantidad]=3 o Productos[Color]=Rojo, pero ese es únicamente el prólogo de una de tres variedades de opciones en los argumentos de filtros de CALCULATE (No es una temática que abordemos en un artículo – Y dicho artículo sería mas bien un libro – Pero es vital que no pierdas de vista que CALCULATE va más allá) De momento piénsalo como condiciones lógicas
Ahora sí, el test
¿Los argumentos de filtro (Del segundo en adelante) son evaluados en cuál operación lógica a la vez?:
- Conjunción Lógica (Y)
- Disyunción Lógica (O)
Toamate uno minutos …
(…)
¿Listo? Y tu respuesta es: _________________
Si respondiste la opción 1, Excelente, así es. Si no, ya lo sabes y vamos conociendo más y más de CALCULATE
Varias Condiciones en FILTER
Como la situación nos pide «esto» ó «esto» debemos utilizar la función FILTER, pero hay algo vital:
«!» Grábate esto a Fuego: La función FILTER sólo admite una, y sólo una condición lógica en su segundo argumento de forma directa.
Ahora.
¿Cómo vinculamos las dos condiciones lógicas en la función FILTER? – ¿Así?:
Casi, pero no.
Realmente esto implica 1 de 3 vías de solución:
- Qué debemos anidar varias funciones OR()
- Qué debemos utilizar el operador lógica ||
- Que debemos Utilizar el operador IN
.
Las opciones 1 y 2 te las dejos más abajo dado que son las convencionales y lo más seguro es que tu sepas como se realiza, por ello voy a pasar directamente a la opción 3, que en lo que he visto es una opción aún desconocido por la mayoría.
Operador IN en DAX
Te presento al operador IN:
El operador IN en el lenguaje DAX permite verificar si cierto valor (El de la fila actual si es un iterador) está incluido en una lista de valores dada en sus argumentos
Es decir, Podemos verificar si el valor «Rojo« está en la lista del especificada en operador IN, ejemplo: IN {«Amarillo» , «Azul»; «Rojo }
Nótese:
- La palabra clave, es decir, el nombre del operador va al principio: IN
- La lista de valores va encerrada en corchetes {} No en paréntesis ()
- Los elementos de la lista se delimitan por punto y coma (;) -Esto depende del separador de lista definido en nuestro PC-
.
Visto de otra manera, el operador IN verifica si el valor «actual» coincide con el primero valor en la lista, o con el segundo valor en la lista, o con el tercer valor en la lista y así sucesivamente con todos los especificados, si coincide con alguna devuelve verdadero de lo contrario falso, total, se comporta (en esta situación) como una disyunción lógica (O)
– ¿Cómo quedaría la solución al problema plateado con el operador IN? →
Cantidad Id IN =
CALCULATE ( SUM ( Datos[Cantidad] ); Datos[Id Cliente] IN { 3; 4 } )
– ¿Que sucede si queremos que sean 3, 4 o 1? Sencillo verdad!: únicamente extendemos la lista con este nuevo elementos así:
Cantidad 3 Elementos =
CALCULATE ( SUM ( Datos[Cantidad] ); Datos[Id Cliente] IN { 3; 4; 1 } )
«!» Nota: El operador IN tiene aún más posibilidades y su entendimiento completo requiere de más profundización, en un artículo posterior seguiremos explorando el operador IN
Operador IN en Power Pivot
Tal vez notaste que he utilizado Power BI, por lo tanto, la pregunta que surge es:
¿Podemos utilizar el Operador IN en Power Pivot para Excel?
La respuesta es si.
Se debe considerar que la barra de fórmulas DAX va a resaltar como si fuera un error de sintaxis, no obstante, lo ejecuta adecuadamente.
«!» Nota: El operador IN se puede utilizar en Power Pivot de Excel 2016, sin embargo, sólo para aquellos que son Office 365 Professional Plus, ya que por ello cuentan cona la actualización de Febrero del 2017, para versiones anteriores de Excel 2016 no es posible utilizar en operador, así como tampoco para versiones de Excel 2013 y 2010.
El Operador IN e Intellisense
Algo que he podido detectar (y qu me ocurre a mí por lo menos) es que el operador IN no aparece en el intellisense, mejor dicho: El operador IN no se muestra listado en el menu de autocompletado cuando digitamos el primer caracter en la barra de fórmulas DAX.
– ¿Por qué?
La verdad no tengo idea, si te aparece o conoces algo compártelo en los comentarios.
Función OR y Operador Lógico para O
Existen dos opciones (1 y 2) para resolver el problema que seguramente habrás planteado ya
– Función OR
No es posible indicar dos condiciones lógicas de forma directa en el segundo argumento de a función FILTER, en contraposición indica que lo podemos hacer de forma indirecta (Tal como con el operador IN) Pero utilizando una función clásica, la función OR
Su funcionamiento y sintaxis, igual que en Excel
Cantidad ID 3 o 4 con OR =
CALCULATE (
SUM ( Datos[Cantidad] );
OR ( Datos[Id Cliente] = 3; Datos[Id Cliente] = 4 )
)
A diferencia de la función O u OR en Excel Que admite un número indeterminado de argumentos, la función OR del lenguaje únicamente acepta dos argumentos, esto quiere decir que, si necesitamos una tercera condición, es necesario empezar a anidar varias funciones OR.
Retomando el caso de que los Id sean: 3,4 o 1
Cantidad ID 3 4 1 con OR =
CALCULATE (
SUM ( Datos[Cantidad] );
OR (
Datos[Id Cliente] = 3;
OR ( Datos[Id Cliente] = 4; Datos[Id Cliente] = 1 )
)
)
– Operador Lógico O
Así como tenemos operadores para suma, resta, multiplicación, etc. También tenemos operadores para las operaciones lógicas
Por lo tanto, otra alternativa con DAX sería:
Cantidad Id 3 4 Operador =
CALCULATE (
SUM ( Datos[Cantidad] );
Datos[Id Cliente] = 3
|| Datos[Id Cliente] = 4
)
Es posible continuar:
Cantidad ID 3 4 1 Operador =
CALCULATE (
SUM ( Datos[Cantidad] );
Datos[Id Cliente] = 3
|| Datos[Id Cliente] = 4
|| Datos[Id Cliente] = 1
)
Bueno es todo de mi parte por el día de hoy
– Hasta la próxima oportunidad