Curso
La función COUNTIF() es muy popular entre quienes usan Excel porque permite contar datos según una condición. Sin embargo, al pasarse a Power BI, muchos usuarios descubren que Power BI no incluye una función COUNTIF() nativa.
Por suerte, puedes replicar la funcionalidad de COUNTIF() con distintas fórmulas DAX (Data Analysis Expressions). En este artículo te guiamos para lograr cálculos tipo COUNTIF() en Power BI con funciones DAX como CALCULATE(), COUNTROWS(), COUNTA() y FILTER().
Por qué COUNTIF() no existe en Power BI
A diferencia de Excel, que se basa en fórmulas por celdas, Power BI gira en torno a cálculos por tablas y al contexto de filtros. Opera sobre tablas y sus relaciones, utilizando DAX para los cálculos.
En lugar de referenciar celdas individuales, DAX trabaja con columnas y aplica los cálculos de forma dinámica según el contexto de filtro, que viene determinado por segmentaciones, filtros de filas/columnas y relaciones entre tablas.
COUNTIF() en Excel usa un enfoque por celdas, aplicando fórmulas fila a fila dentro de un rango. El enfoque de Power BI es distinto: aprovecha las relaciones entre tablas para refinar los cálculos. En vez de recorrer celdas, aplica filtros en función del contexto del informe usando DAX.
Implicaciones para los usuarios
Si vienes de Excel, tendrás que adaptarte al enfoque por tablas de Power BI. Los métodos DAX, que operan sobre columnas, son más eficientes que las iteraciones fila a fila.
A diferencia de Excel, en Power BI debes elegir el método más adecuado para replicar COUNTIF() según tu modelo de datos. Es decir, hay que desaprender el hábito de aplicar fórmulas a celdas sueltas y pensar en tablas y contextos de filtro.
Funciones DAX clave para replicar la lógica de COUNTIF()
La forma de implementar COUNTIF() en Power BI depende de factores como las relaciones entre tablas, la presencia o no de valores faltantes, el tamaño de los datos, etc. Algunas funciones DAX están mejor optimizadas y procesan más rápido y con más eficiencia.
Resumen de funciones clave
Las funciones DAX se usan para crear columnas calculadas, medidas y tablas. Estas funciones te ayudarán a replicar la funcionalidad de COUNTIF() en Power BI.
-
CALCULATE(): modifica el contexto de filtro de una expresión y permite aplicar nuevos filtros o cambiar los existentes de forma dinámica. Por ejemplo, puedes usarla para calcular las ventas totales de una región concreta. -
COUNTROWS(): cuenta el número de filas de una tabla dada, y puedes combinarla con funciones de filtrado para contar filas específicas. Un ejemplo sería contar pedidos de venta superiores a 1.000 $. -
COUNTA(): cuenta valores no vacíos en una columna y es útil cuando hay datos faltantes. Por ejemplo, puedes contar IDs de cliente no vacíos para asegurarte de que solo se consideran registros válidos. -
FILTER(): normalmente se usa conCALCULATE()yCOUNTROWS(); devuelve una tabla según una condición. Por ejemplo, puedes devolver una tabla con pedidos de venta por encima de 500 $. -
ALLEXCEPT(): elimina todos los filtros aplicados excepto los que se especifiquen; por ejemplo, puedes devolver una tabla de ventas totales por región aunque haya segmentaciones o filtros de tabla. Es clave cuando trabajas con agregaciones en jerarquías. -
RELATEDTABLE(): devuelve una tabla según relaciones existentes. Un ejemplo sería contar los pedidos de cada cliente usando las relaciones del dato de clientes.
Cómo trabajan juntas
Como COUNTROWS() cuenta las filas de una tabla, puedes construir una tabla que cumpla una condición con FILTER(). Luego usa CALCULATE() para modificar el contexto de filtro y asegurar que COUNTROWS() solo considere las filas que cumplen la condición. Aquí tienes un ejemplo de sintaxis DAX:
Sales over 5 quantities =
CALCULATE(
COUNTROWS(Sales),
FILTER('Sales, 'Sales[Quantity] > 5)
)
La función CALCULATE() actúa como una combinación de expresiones. En lugar de usar COUNTROWS() para contar todos los datos, CALCULATE() lo restringe al contexto de filtro definido con FILTER().
Ejemplos básicos de equivalentes a COUNTIF() en Power BI
Antes de ver algunos ejemplos de cómo implementar COUNTIF() en Power BI, asegúrate de cargar los datos de ventas de un supermercado.
Ejemplo 1: número de pedidos de clientas
La sintaxis DAX siguiente calcula el número de pedidos realizados por clientas.
Orders by female customers =
CALCULATE(
COUNTROWS(Sales),
FILTER(Sales, Sales[Gender] = "Female")
)

Número de pedidos de clientas. Imagen del autor.
-
FILTER(Sales, Sales[Gender] = "Female")filtra los pedidos realizados por clientas. -
COUNTROWS(Sales), en lugar de contar toda la tabla, cuenta la tabla filtrada gracias aCALCULATE().
Ejemplo 2: contar pedidos por ciudad
A continuación, una sintaxis DAX para contar el número de pedidos por ciudad.
Total Orders by City = CALCULATE(COUNTA(Sales[City]), ALLEXCEPT(Sales, Sales[City]))

Número de pedidos por ciudad. Imagen del autor.
-
COUNTA(Sales[City])cuenta los valores no vacíos de la columna City. -
ALLEXCEPT(Sales, Sales[City])elimina todos los filtros de la tabla Sales excepto el de la columnaCity. -
CALCULATE()garantiza queCOUNTA()se calcule por separado para cada ciudad, actuando como unCOUNTIF()de Excel.
Ejemplo 3: método alternativo con COUNTROWS
Otra alternativa es usar la siguiente sintaxis DAX, que emplea COUNTROWS() en lugar de COUNTA().
Total Orders by City = CALCULATE(COUNTROWS(Sales), ALLEXCEPT(Sales, Sales[City]))
COUNTROWS() cuenta el número de filas de la tabla Sales independientemente de si hay vacíos.
Si la columna City no tiene valores vacíos, ambos enfoques devuelven el mismo resultado. Si hay valores faltantes en City, COUNTA() los excluye, mientras que COUNTROWS() los incluye.
Usa COUNTROWS() cuando cada fila represente un registro (por ejemplo, un pedido). Si hay entradas no válidas, puedes emplear COUNTA(), que solo cuenta registros con un valor válido.
Uso de medidas para cálculos dinámicos
Hay situaciones en las que necesitas crear medidas que cambien dinámicamente según un filtro o segmentación. En esta sección vemos cómo implementar COUNTIF() en esos casos.
Escenario: contar pedidos de alto valor
Aquí tienes un ejemplo en el que nos interesan los pedidos con una cantidad total superior a cinco.
High Value Orders = COUNTROWS(FILTER(Sales, Sales[Quantity] > 5))

Número de pedidos de alto valor. Imagen del autor.
-
FILTER(Sales, Sales[Quantity] > 5)devuelve los pedidos con cantidad superior a cinco. -
COUNTROWS()cuenta las filas de la tabla filtrada con pedidos superiores a cinco.
A diferencia de las columnas calculadas, que al crearlas aumentan el tamaño del modelo y el almacenamiento, las medidas solo se calculan cuando hacen falta, por lo que son más eficientes. La sintaxis DAX para crear una columna calculada sería:
High Value = IF(Sales[Quantity] > 5, 1, 0)

Columna calculada High Value. Imagen del autor.
Esto almacenaría un 1 o un 0 estático en cada fila. Para contar los pedidos de alto valor, deberías crear una medida con SUM(Sales[High Value]).
Imagina crear columnas calculadas para cada filtro: aumentarías el almacenamiento y perderías flexibilidad.
Aquí tienes una tabla que resume por qué conviene priorizar medidas frente a columnas calculadas.
|
Medida |
Columna calculada |
|
Se calcula en tiempo de consulta; responde a filtros |
Estática; se calcula al cargar/actualizar los datos |
|
Más eficiente; se computa solo cuando es necesaria |
Consume almacenamiento y aumenta el tamaño del modelo |
|
Se ajusta dinámicamente según filtros, segmentaciones y visuales |
Los valores no cambian salvo que se actualicen los datos. |
Técnicas avanzadas y múltiples condiciones
En Excel, COUNTIFS() admite múltiples condiciones, algo que también puedes replicar en Power BI.
Criterios múltiples / lógica COUNTIFS()
Esta sintaxis DAX cuenta los pedidos con cantidad superior a cinco y pagados con tarjeta de crédito.
Quantity Above 5 and Credit Card =
COUNTROWS(
FILTER(
Sales,
Sales[Quantity] > 5 && Sales[Payment] = "Credit card"
)
)

Número de pedidos con cantidad superior a cinco y pagados con tarjeta de crédito. Imagen del autor.
La fórmula filtra la tabla Sales donde la cantidad supera 5 y el método de pago es tarjeta de crédito. && representa el operador AND, y garantiza que solo se cuenten los pedidos que cumplen ambas condiciones.
Si te interesan los pedidos que cumplan cualquiera de las condiciones, usa el operador OR, representado por || en DAX.
Quantity Above 5 or Credit Card =
COUNTROWS(
FILTER(
Sales,
Sales[Quantity] > 5 || Sales[Payment] = "Credit card"
)
)

Número de pedidos con cantidad superior a cinco o pagados con tarjeta de crédito. Imagen del autor.
Uso de operadores lógicos y variables
La sintaxis DAX que replica COUNTIF() puede complicarse. Usar variables facilita la lectura, asegura que las condiciones se evalúan en el orden deseado y evita cálculos redundantes al almacenar valores una sola vez.
Aquí tienes otro ejemplo para contar los pedidos de clientas, pagados con tarjeta de crédito o con cantidad superior a cinco, usando variables.
CreditCard Or Above 5 By Female =
VAR FilteredSales =
FILTER(
Sales,
(Sales[Quantity] > 5 || Sales[Payment] = "Credit card")
&& Sales[Gender] = "Female"
)
RETURN
COUNTROWS(FilteredSales)

Número de pedidos de clientas pagados con tarjeta de crédito o con cantidad superior a cinco. Imagen del autor.
El filtro se almacena en una variable que luego usa COUNTROWS(). Otra forma de escribir la expresión sería:
CreditCard Or Above 5 By Female =
VAR MinQuantity = 5
VAR FilteredSales =
FILTER(
Sales,
(Sales[Quantity] > MinQuantity || Sales[Payment] = "Credit card")
&& Sales[Gender] = "Female"
)
VAR Result = COUNTROWS(FilteredSales)
RETURN
Result
Esta vez, la cantidad mínima, el filtro y el resultado se guardan como variables. Igual que el principio matemático de prioridad de paréntesis, DAX también prioriza las condiciones que están entre paréntesis.
En el ejemplo anterior, el operador OR || se evalúa antes que el operador AND && porque está dentro de un paréntesis. Es decir, primero se filtran los pedidos con cantidad superior a 5 o pagados con tarjeta y después se filtran los de clientas.
COUNTIF() entre tablas relacionadas
Si trabajas con más de una tabla, también puedes usar COUNTROWS() o COUNTA() para contar registros según una condición de otra tabla con RELATEDTABLE().
La función RELATEDTABLE() tiene en cuenta la relación del modelo entre dos tablas, ya sea de uno a uno o de uno a muchos.
Imagina que tenemos otra tabla de ventas llamada Sales2 con los mismos datos del supermercado, y que Sales y Sales2 están relacionadas por Invoice ID.

Relación entre las tablas Sales y Sales2. Imagen del autor.
Puedes usar esta sintaxis DAX para ver cuántos clientes son miembros, suponiendo que Sales no tiene la columna Customer type pero Sales2 sí.
Orders by members =
COUNTROWS(FILTER(RELATEDTABLE(Sales2), Sales2[Customer Type] = "Member"))

Número de pedidos de clientes que son miembros. Imagen del autor.
-
RELATEDTABLE(Sales2)filtra automáticamenteSales2para incluir solo las filas con el mismoInvoice IDque enSales. -
La función
FILTER()lo reduce aún más a pedidos de tipo"Member", mientras queCOUNTROWS()cuenta la tabla filtrada.
Casos de uso y consejos de integración
Aquí tienes algunos casos prácticos y consejos de integración para implementar COUNTIF() en Power BI.
Escenarios reales
Si tienes una tabla con resultados de exámenes o pedidos, puedes usar COUNTROWS() y FILTER() para contar registros repetidos. Usando la columna de notas, también puedes contar cuántos estudiantes aprueban o suspenden. Otro equivalente importante a COUNTIF() es SUMX(), que te permite sumar notas en función de una condición.
Herramientas de integración de datos
En lugar de subir siempre tu archivo de Excel o Google Sheets para analizarlo, puedes usar herramientas como Coupler.io para automatizar la extracción de datos.
Cuando se actualice tu hoja de cálculo, los cambios se reflejarán automáticamente en tu panel de Power BI sin tener que subir nada manualmente.
Así te aseguras de que Power BI siempre muestra el dato más reciente sin cargas manuales, y tú puedes centrarte en obtener insights y tomar decisiones. También puedes usar estas herramientas para conectar múltiples fuentes en un solo panel.
Consejos prácticos para legibilidad y rendimiento
Usa columnas calculadas cuando los cálculos deban hacerse a nivel de fila antes de las agregaciones. Usa una medida cuando el cálculo dependa de filtros o segmentaciones del usuario, o cuando necesites un valor agregado y no cálculos por fila.
Entender el contexto de filtro es clave para decidir entre medida o columna calculada. El contexto de filtro aplica con segmentaciones, filtros o agrupaciones, a diferencia del contexto de fila, que aplica dentro de una fila. Las columnas calculadas usan contexto de fila y pueden crear columnas innecesarias que aumentan la memoria.
También es importante considerar el contexto de filtro al crear medidas. Por ejemplo, en lugar de SUM(Sales[Amount]), usa CALCULATE(SUM(Sales[Amount])) para controlar el filtrado. Si ya tienes filtros aplicados, con la primera opción podrías no obtener el valor correcto; con la segunda, puedes gestionar los filtros aplicados.
Evita también abusar de iteradores como FILTER() en una misma expresión DAX, ya que en conjuntos grandes ralentizan el cálculo al iterar fila a fila.
Conclusión
Aunque Power BI no incluye el COUNTIF() nativo de Excel, funciones DAX como CALCULATE(), COUNTROWS(), COUNTA() y FILTER() permiten replicar su comportamiento.
El enfoque depende de la naturaleza de tus datos. Si hay valores faltantes, considera COUNTA(); si el dato está completo, COUNTROWS() es una buena opción. Para excluir filtros externos aplicados a los datos, usa ALLEXCEPT() dentro de CALCULATE().
Recuerda que el tipo de sintaxis DAX que escribas influye en la velocidad de carga de los visuales del panel. Intenta escribir DAX optimizado y saber cuándo usar medidas o columnas calculadas. Aquí tienes algunos recursos de DataCamp para explorar técnicas DAX avanzadas.
Conviértete en Analista de Datos de Power BI
Domina la herramienta de inteligencia empresarial más popular del mundo.
Instructor experimentado en ciencia de datos y bioestadístico con experiencia en Python, R y aprendizaje automático.
Power BI Countif() Questions
Does Power BI have a native COUNTIF() function?
Power BI no tiene una función COUNTIF() nativa, pero hay varias formas de implementarla en Power BI.
What are the functions for implementing COUNTIF() in Power BI?
Las funciones principales para implementar COUNTIF() en Power BI son CALCULATE(), COUNTROWS(), COUNTA(), FILTER(), ALLEXCEPT() y RELATEDTABLE(). Según tu modelo de datos, puedes combinarlas para replicar COUNTIF() en Power BI.
What is the difference between COUNTROWS() and COUNTA()?
COUNTROWS() cuenta el número de filas de los datos, aunque alguna no tenga un registro válido, mientras que COUNTA() cuenta el número de registros válidos en una columna.
What is the advantage of using measures over calculated columns?
Las medidas son más eficientes y apenas consumen almacenamiento porque se calculan al vuelo, a diferencia de las columnas calculadas que aumentan la dimensión del dato y consumen espacio.
What are the practical applications of COUNTIF() implementation in Power BI?
La implementación de COUNTIF() en Power BI tiene muchos usos: desde el recuento condicional de registros hasta la creación de columnas condicionadas por conteos, entre otros.
