🟢 Introducción
La función VALUES() en DAX es una de las herramientas más poderosas —y a veces subestimadas— para obtener una lista única de valores de una columna o tabla. Es clave para cálculos personalizados, relaciones dinámicas, segmentación inteligente y lógica con tablas virtuales.
Si alguna vez has necesitado “obtener los clientes únicos”, “saber qué productos están presentes en un filtro” o “crear cálculos por categoría”, VALUES() es la función adecuada.
🧠 Qué es / para qué sirve
VALUES() devuelve:
- Una tabla de valores únicos de una columna
- O una tabla con todas las filas únicas si se usa con una tabla completa
Sirve para escenarios como:
- Crear segmentaciones personalizadas
- Detectar qué valores están filtrados actualmente
- Generar cálculos basados en listas únicas de un contexto
- Usar tablas virtuales dentro de SUMX, COUNTX, CALCULATE, etc.
- Resolver problemas de relaciones inactivas
Ejemplo clásico:
VALUES(Product[Category])
Devuelve una tabla con las categorías distintas presentes en el contexto actual.
🧩 Sintaxis
VALUES(<columnName>)
VALUES(<tableName>)
<columnName> → devuelve una columna de valores únicos
<tableName> → devuelve filas únicas completas (menos común, pero poderoso)
💻 Ejemplos con código
🔹 Ejemplo 1 — Obtener valores únicos de una columna
CategoriasUnicas =
VALUES(Product[Category])
🔹 Ejemplo 2 — Contar cuántos valores únicos existen
NumeroCategorias =
COUNTROWS(VALUES(Product[Category]))
🔹 Ejemplo 3 — Usar VALUES dentro de CALCULATE
VentasPorCategoria =
CALCULATE(
SUM(Sales[SalesAmount]),
VALUES(Product[Category])
)
Esto asegura que la medida respete sólo las categorías filtradas actualmente.
🔹 Ejemplo 4 — Detectar si un filtro selecciona un solo valor
CategoriaSeleccionada =
IF(
HASONEVALUE(Product[Category]),
VALUES(Product[Category]),
"Múltiples o ninguna"
)
Muy útil para tarjetas, títulos dinámicos y lógica condicional.
🔹 Ejemplo 5 — Resolver relaciones inactivas
VentasPorCliente =
CALCULATE(
SUM(Sales[SalesAmount]),
VALUES(Customer[CustomerID])
)
Forzamos la alineación de contextos a través de valores únicos.
🧱 Buenas prácticas
✅ Úsala para obtener listas únicas según el contexto → ideal para tablas virtuales
✅ Combínala con COUNTROWS para obtener cardinalidades
✅ Emplea VALUES dentro de CALCULATE para “respetar” el filtro actual
✅ Para columnas con alta cardinalidad, usa VALUES con cuidado (impacta rendimiento)
✅ Usa HASONEVALUE cuando esperes un único valor dentro de VALUES
⚠️ Errores comunes
🚫 Confundir VALUES() con DISTINCT(), aunque son similares:
- VALUES respeta contexto
- DISTINCT ignora algunos filtros
🚫 Usar VALUES en tablas gigantes sin filtro previo
🚫 Esperar que VALUES siempre devuelva un único valor (solo en ciertas situaciones)
🚫 Usarlo fuera de contexto dentro de medidas sin entender que genera tablas virtuales
🔄 Variantes o alternativas
- DISTINCT() → para lista única ignorando algunos filtros
- ALLSELECTED() → para listas de valores según selección visual
- SUMMARIZE() → para tablas más complejas
- HASONEVALUE() → cuando se requiere un único valor de VALUES

Deja un comentario