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())
  1. 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.

  2. 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 %

  3. 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.

  4. 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.

  5. En resumen, HASONEVALUE() permite identificar si la expresión se evalúa en el contexto de un solo valor para columnName.