Julian Camilo Herrera Rojas
Angello Triviño Umaña
Carlos Andres Bolivar Berrio
Las funciones de filtro en DAX permiten reducir el universo de datos y trabajar con escenarios acotados según las necesidades del negocio. Si te dedicas al análisis de datos en Power BI, dominar estas funciones te ayudará a construir tablas calculadas más útiles y precisas.
A través de tablas calculadas puedes generar nuevos conjuntos de datos a partir de tus dimensiones originales, aplicando condiciones específicas con la función FILTER y otras agregaciones de texto como SEARCH. Aquí verás tres ejemplos prácticos sobre fechas, marcas y canales.
¿Cómo crear una tabla calculada de fechas filtrada por semestre?
Imagina que tu equipo necesita analizar únicamente el primer semestre de cada año. La dimensión de fechas en Data View contiene una variable llamada semester, que divide el año en semestre uno y semestre dos según los meses [0:30].
Para generar una tabla acotada, ve a Table Tools, selecciona New Table y nómbrala Semester One. La fórmula aplica un filtro sobre la tabla Dim Dates cuando el campo semester sea igual a "semester one", escrito como cadena de texto entre comillas [1:00].
El resultado es una nueva dimensión de fechas que contiene únicamente los meses de enero a junio. Así, filter te ayuda a reducir escenarios sin alterar tu modelo original.
¿Qué hace la función FILTER en DAX? Toma una tabla y le aplica una condición lógica para devolver solo las filas que cumplen ese criterio. Es la base para construir tablas calculadas con alcance limitado.
¿Cómo filtrar una tabla por marcas específicas como Toyota o Suzuki?
Al construir una tabla de información con ventas totales por marca y ordenarla de mayor a menor, puedes identificar a los líderes: en este caso, Toyota y Suzuki encabezan el ranking [1:45].
Para crear una tabla enfocada solo en esas marcas, genera una nueva tabla calculada llamada Top Brand. Aplica un filtro sobre la dimensión de vehículos donde la variable brand sea igual a Toyota o igual a Suzuki. La condición OR permite incluir ambas marcas en el mismo resultado.
Un detalle interesante: aunque escribas suzuki en minúsculas, DAX lo reconoce. Aun así, la buena práctica recomendada es copiar el texto exactamente como aparece en los datos para evitar problemas futuros [2:20].
¿Cómo usar SEARCH para filtrar por palabras dentro de un campo?
Cuando necesitas filtrar por una palabra contenida dentro de un campo de texto, SEARCH es la función indicada. Supón que tu tabla incluye la variable channel junto a las ventas totales, y varios canales contienen la palabra advertising [2:50].
Para aislar esos canales, crea una tabla calculada llamada Advertising Channel. Dentro del FILTER sobre la dimensión de canales, usa SEARCH para buscar la palabra "advertising" en el campo channel, comenzando desde la primera posición.
El resultado es una tabla nueva que contiene únicamente los canales cuyo nombre incluye esa palabra clave. Esta combinación es muy útil cuando trabajas con categorías de texto poco estandarizadas.
¿Cuándo conviene usar funciones de filtro en DAX? Cuando necesitas reducir conjuntos de datos y construir tablas personalizadas que respondan a una pregunta de negocio puntual, sin modificar el modelo universal.
¿Qué conceptos clave debes dominar al trabajar con filtros?
Antes de avanzar, conviene tener claros los elementos que aparecen en estos ejemplos:
Con estos bloques puedes construir escenarios tan amplios o tan específicos como necesites.
Reto: construye una tabla de fechas solo para fines de semana
Ahora te toca a ti. El desafío consiste en generar una tabla calculada de fechas que incluya únicamente los días en que day of the week sea Saturday o Sunday [4:00].
Para resolverlo necesitas haber completado el reto de clases anteriores, donde calculaste el campo del día de la semana. Una vez que tengas tu tabla lista, compártela en los comentarios para revisarla juntos.
Julian Camilo Herrera Rojas
Angello Triviño Umaña
Carlos Andres Bolivar Berrio
Gabriel Chiu
Michael Pineda Menjura
Paulo Esteban Orsini
Jose Potes
Diego Mauricio Zuluaga Rodríguez
Luis Carlos Hidalgo Melo
Cristian Camilo Bulla Murcia
Juan Torres
Jorge Alberto Gil
Sebastian Pinzon
Heiber Hernán Beltrán Torres
MUTA World
Christiam Hernández
Jose Potes
Christiam Hernández
Adriana Patricia Rodriguez Toloza
Diego Mauricio Zuluaga Rodríguez
Diego Mauricio Zuluaga Rodríguez
Miguel Varona
Darlinson Felipe Polania Camacho
John Fredy Villalba Luna
Nestor Bejarano
Camilo Hernando Lozano Estupiñan
Dias Fines de semana = FILTER(Dim_Fechas, Dim_Fechas[Dia] = "Sábado" || Dim_Fechas[Dia] = "Domingo")
Tener presente la Tilde del Sábado, cuando lo hice sin tilde no lo tuvo en cuenta.
Me pasó igual.... Recodar las tildes o acentos
pense que al igual que con mayusculas pasaba con tildes :(
++Resumen de la clase:++
Dim fecha S1 = FILTER('Dim fecha','Dim fecha'[Semestre]="Semestre 1")
Canal Publicidad = FILTER(dim_canal,SEARCH("Publicidad",dim_canal[canal],1,0) )
Dim fecha weekend = FILTER('Dim fecha','Dim fecha'[Día Letra]="Sábado" ||'Dim fecha'[Día Letra]="Domingo")
Tabla Fin de semana = FILTER(Dim_Fechas,Dim_Fechas[Número Día_Semana] = 7 || Dim_Fechas[Número Día_Semana] = 1 )
Asi genere un filtro de los fines de semana.
La función FILTER en DAX se utiliza para devolver una tabla que representa un subconjunto de otra tabla, evaluando una condición específica. Su sintaxis es:
FILTER(<tabla>, <expresión>)
Donde <tabla> es la tabla que deseas filtrar y <expresión> es una condición que cada fila debe cumplir.
Por otro lado, SEARCH se utiliza para encontrar una subcadena dentro de otra cadena y su sintaxis es:
SEARCH(<subcadena>, <cadena>, [<inicio>, <modo>])
Donde <subcadena> es lo que buscas, <cadena> es donde buscas, y los parámetros opcionales <inicio> y <modo> controlan la búsqueda.
Ambas funciones son útiles para crear tablas calculadas más específicas y enfocadas en las necesidades de análisis.
Hola, en el reto hice algo muy interesante que quiero compartirte. Lo que hice es que creé valores en strings(letras) en lugar de enteros, ya que se me haria muy complicado escribir numeros por numero y caer en la equivocación en Febrero(que no tiene 30 dias) entonces, creee una nueva columna con la siguiente condicion. Dia = FORMAT(Calendario[Date],"dddd") esta instruccion me trae todos los dias desde Enero hasta la fecha pero en letras. (no uses una columna dia numero ya que puede traerte informacion equivoca, si gustas, apoyate del calendario de la fecha y notaras la diferencia que usando day numero, te da un valor errado). luego, cree una nueva tabla calculada asi: Weekend = FILTER(Calendario, (Calendario[Dia] = "Friday" || Calendario[Dia] = "Saturday") && (Calendario[Year] = 2018 || Calendario[Year] = 2019 || Calendario[Year] = 2020 || Calendario[Year] = 2021))
que es donde sustraje solo los años. si te preguntas que son esos signos(&&,||) son simbolos logicos, and y or, en lugar de usar las palabras usé simbolo(es una buena practica me dijo un profesor). espero te haya servido. sigamos aprendiendo
¿Cómo filtro múltiples condiciones en DAX?
Para evaluar más de un escenario al mismo tiempo dentro de la función FILTER, puedes utilizar operadores lógicos directamente en tu código. Si necesitas que se cumpla una condición o la otra, empleas el operador || (doble barra vertical), logrando que tu código se vea como FILTER(Tabla, Tabla[Marca] = "Toyota" || Tabla[Marca] = "Suzuki"). Esta flexibilidad te permite construir reglas de negocio muy precisas y agrupar categorías que originalmente estaban separadas en tu modelo de datos, facilitando enormemente la creación de reportes enfocados en nichos específicos sin necesidad de alterar la fuente original.
Dim_fin de semana = FILTER(Dim_fechas,Dim_fechas[nombre dia] = "Sábado"|| Dim_fechas[nombre dia] = "Domingo" )
Yo hice esto
Y aquí creé la tabla
Dim_DATE_FinSemana = FILTER(Dim_fechas,OR (SEARCH(6 ,Dim_fechas[Dia Sem],1,0),SEARCH(7,Dim_fechas[Dia Sem],1,0)))
Aproveché la columna que habíamos creado y usé un OR para tomar en cuenta el 6 y 7
Master
primero saque una columna para sacar los dias de la semana en numero 1,2,3....7 creando una nueva columna con la formula
dia semana = WEEKDAY(DIm_calendario[Date])
y luego aplique la formuladel filter con base a esa columna con la siguiente formula
fines de semana = FILTER(DIm_calendario,DIm_calendario[dia semana] >=6)
Pregunta en la Tabla Canal Publicidad = FILTER(dim_canal,SEARCH("publicidad",dim_canal[canal],1,0))
Comunidad al agregar el SEARCH hay alguna forma que pueda buscar la palabra deseada sin importar la ubicación agradezco su ayuda.
Tengo entendido que SEARCH busca el texto en la celda, lo que si escribes SEARCH("and",columna,1) y hay una fila que tiene el texto "como dijo pacho and josefina" dará TRUE y aparecerá en tu tabla
Cristian, buen dia hermano, en el contexto que creaste allí, solo aplica para los dia de la semana 6 y 7, pero los fines de semana son tambien en otros dias, lo consideraste allí? y si lo hiciste, como lo hiciste? saludos
Hola Jose, mira te comparto
Trimestre = SWITCH( TRUE(), // Evalúa que la expresión sea cierta en otras palabras es como un IF Global Dim_Fechas[Numero Mes]=1 || Dim_Fechas[Numero Mes]=2 || Dim_Fechas[Numero Mes]=3,"Trimestre 1", // si cumple con que está dentro del mes 1 ,o, el 2 ,o, 3 entonces póngale Trimestre 1 si no continúe con la siguiente expresión Dim_Fechas[Numero Mes]=4 || Dim_Fechas[Numero Mes]=5 || Dim_Fechas[Numero Mes]=6,"Trimestre 2", Dim_Fechas[Numero Mes]=7 || Dim_Fechas[Numero Mes]=2 || Dim_Fechas[Numero Mes]=9,"Trimestre 3", "Trimestre 4") // si no cumple con las primeras tres condiciones entonces ponga trimestre 4 espero haya sido claro
Listos✅
¿Por qué es mejor reducir los universos?
Reducir los universos de datos mediante tablas calculadas es una estrategia fundamental para garantizar la eficiencia técnica y la claridad analítica del negocio. Al extraer solo los datos necesarios, como aislar únicamente las ventas de los fines de semana, tus fórmulas DAX posteriores se ejecutarán muchísimo más rápido porque iterarán sobre una fracción de las filas originales. Adicionalmente, a nivel de experiencia de usuario, entregar un modelo de datos segmentado y libre de ruido visual evita errores de interpretación, permitiendo que los tomadores de decisiones encuentren las respuestas que necesitan de forma inmediata y precisa.
SOLUCIÓN TAREA
Dim_Venta_Sabado_Domingo = FILTER(Dim_Fechas,Dim_Fechas[Nombre Día] = "domingo" || Dim_Fechas[Nombre Día] = "sábado")
Hola, mi solución
Dim_Venta_Sabado_Domingo = FILTER(dim_CALENDARIO, dim_CALENDARIO[Dia semana texto] = "Sábado" || dim_CALENDARIO[Dia semana texto] = "Domingo" )