Función HASONEVALUE (DAX)
Devuelve TRUE cuando el contexto de columnName se ha filtrado hasta llegar a un único valor distintivo. En caso contrario, es FALSE.
Sintaxis
HASONEVALUE(<columnName>)
Parámetros
- columnName
Nombre de una columna existente, con la sintaxis estándar de DAX. No puede ser una expresión.
Valor devuelto
TRUE cuando el contexto de columnName se ha filtrado hasta llegar a un único valor distintivo. En caso contrario, es FALSE.
Comentarios
- Una expresión equivalente a HASONEVALUE() es COUNTROWS(VALUES(<columnName>)) = 1.
Ejemplo
En el siguiente ejemplo, se desea crear una fórmula que compruebe si el contexto se segmenta mediante un valor para calcular un porcentaje en un escenario predefinido. En este caso, se desea comparar las ventas de distribuidor con las ventas de 2007, por lo que necesita saber si el contexto se filtra por años individuales. Por otra parte, si la comparación carece de significado, desea que se devuelva BLANK.
Si desea seguir el escenario, puede descargar la hoja de cálculo con el modelo desde Datos de ejemplo de PowerPivot.
Cree una medida llamada [ResellerSales compared to 2007] mediante la siguiente expresión:
=IF(HASONEVALUE(DateTime[CalendarYear]),SUM(ResellerSales_USD[SalesAmount_USD])/CALCULATE(SUM(ResellerSales_USD[SalesAmount_USD]),DateTime[CalendarYear]=2007),BLANK())
Después de crear la medida, debe tener un resultado vacío en [ResellerSales compared to 2007], como se muestra a continuación:
ResellerSales compared to 2007
La celda en blanco del resultado se debe a que no hay filtros de año único en ninguna parte del contexto.
Arrastre DateTime[CalendarYear] al cuadro Etiquetas de columna. La tabla debería tener un aspecto parecido a este:
Etiquetas de columna
2005
2006
2007
2008
ResellerSales compared to 2007
24.83 %
74.88 %
100.00 %
50.73 %
Arrastre ProductCategory[ProductCategoryName] al cuadro Etiquetas de fila para obtener algo parecido a esto:
ResellerSales compared to 2007
Etiquetas de columna
Etiquetas de fila
2005
2006
2007
2008
Accessories
6.74 %
31.40 %
100.00 %
55.58 %
Bikes
28.69 %
77.92 %
100.00 %
53.46 %
Clothing
3.90 %
55.86 %
100.00 %
44.92 %
Components
11.05 %
65.99 %
100.00 %
38.65 %
Grand Total
24.83 %
74.88 %
100.00 %
50.73 %
¿Ha observado que los totales generales han aparecido en la parte inferior de las columnas, pero no para las filas? La razón es que el contexto para los totales generales de las filas comprende más de un año, pero para las columnas comprende un único año.
Arrastre DateTime[CalendarYear] al cuadro Segmentaciones de datos horizontales y SalesTerritory[SalesTerritoryGroup] al cuadro Etiquetas horizontales. Debería tener un conjunto de resultados vacío, porque la tabla contiene datos de varios años. Seleccione 2006 en la segmentación de datos; la tabla debería volver a tener datos. Pruebe otros años para ver cómo cambian los resultados.
En resumen, HASONEVALUE() permite identificar si la expresión se evalúa en el contexto de un solo valor para columnName.