Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Register now to learn Fabric in free live sessions led by the best Microsoft experts. From Apr 16 to May 9, in English and Spanish.

Reply
BastiaanBrak
Helper IV
Helper IV

Consulta DAX

Hola a todos, espero que alguien pueda ayudarme con una consulta DAX que funciona bien en la mayoría de los casos de uso, pero no cuando faltan datos.

Para aclararlo, mi modelo de datos incluye una tabla de hechos con datos de lluvia para diferentes regiones, períodos de años y tiempo y tablas de dimensiones para los períodos de regiones, años y tiempo. He creado una medida DAX que calcula la precipitación media para 1981-2010 y esta medida calcula el promedio si se selecciona un período de tiempo y suma los promedios si se selecciona más de un período de tiempo:

Lluvias (mm, 1981-2010 promedio/suma)

Tiempo de VAR (VAR TimeperiodAVG)
CALCULAR (
PROMEDIO('Datos'[Lluvia (mm)]),
FILTER(ALLEXCEPT('Data','Regions'[Region abbrev],'Time periods'[Time period]), 'Data'[Year] > 1980 && 'Data'[Year] < 2011))

devolución
IF(HASONEVALUE('Períodos de tiempo'[Período de tiempo]),
TimeperiodAVG,
SUMX(VALUES('Períodos de tiempo'[Período de tiempo]), TimeperiodAVG)
)

Esto funciona bien siempre que un año determinado tenga datos para todos los períodos de tiempo seleccionados. Por ejemplo, la captura de pantalla siguiente muestra que cuando se han seleccionado períodos de tiempo enero a junio, la medida calcula correctamente el mismo total en cada año:

Capture1.PNG

Sin embargo, cuando se selecciona un período de tiempo adicional, aquí julio, para el que no hay datos en la tabla, la medida ya no calcula el total correcto. En su lugar, el cálculo que se realiza se convierte en: 446.1 * (6/7) a 382.4 :

Capture2.PNG

Lo que me gustaría que la medida calculara en su lugar en este caso de uso (es decir, cuando se han seleccionado Jan - Jul) es la media (total) precipitaciones basadas en 1981-2010 Años, pero sólo para aquellos períodos de tiempo seleccionados en el filtro para el que hay datos para un año en particular, es decir, en este caso enero - junio para 2020 y enero - para todos los demás años. ¿Cómo puedo modificar la medida anterior para lograrlo?

Muchas gracias, Bastiaan

.pbix libro disponible aquí (hasta el 15 de julio de 2020): https://filebin.net/oabnasrc12lfnttn

4 REPLIES 4
amitchandak
Super User
Super User

@BastiaanBrak , Cualquier razón para poner un filtro para el año por separado, ¿la segmentación no funciona?

@amitchandak gracias por su respuesta, he visto el vídeo de BI Elite pero me temo que no veo cómo resuelve el problema con mi consulta DAX. ¿Podría aclararse, por favor?

"Cualquier razón para poner un filtro para el año por separado, es la cortadora no funciona?"

El trasfondo es que en mi informe real (véase el primer informe en la página aquí: https://ahdb.org.uk/knowledge-library/weatherhub) necesito comparar las precipitaciones en un año determinado y los períodos de tiempo con la media (para el mismo período de tiempo) durante un largo período de referencia, en este caso 1981-2010, por lo tanto, por qué estos años se añaden al filtro.

Hola @BastiaanBrak ,

Puesto que ha determinado el rango de año, no creo que necesite crear una segmentación de año más si desea que el año 2020 muestre el mismo valor que otros años cuando no tiene algún valor.

He modificado su fórmula de esta manera:

Rainfall (mm, 1981-2010 average / sum) = 
VAR TimeperiodAVG =
    CALCULATE (
        AVERAGE ( 'Data'[Rainfall (mm)] ),
        FILTER (
            ALLEXCEPT ( 'Data', 'Regions'[Region abbrev], 'Time periods'[Time period] ),
            'Data'[Year] > 1980
                && 'Data'[Year] < 2011
        )
    )
VAR _mul =
    SUMX (
       FILTER(
           ALLSELECTED('Data'),
           'Data'[Year] > 1980 &&
           'Data'[Year] < 2011
       ),
        [Rainfall (mm)]
    )
        / CALCULATE (
            DISTINCTCOUNT ( Data[Year] ),
            FILTER ( ALLSELECTED ( Data ), 'Data'[Year] > 1980 && 'Data'[Year] < 2011 )
        )
RETURN
    IF ( HASONEVALUE ( 'Time periods'[Time period] ), TimeperiodAVG, _mul )

Si no se agrega la segmentación de datos de año, el resultado correcto, cuando se usa la segmentación de años adicionalmente, cuando se cambia la segmentación de datos, el valor de la medida también cambiará.

rresult.png

Best Looks,
Yingjie Li

Si este post ayuda, por favor considere Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

Muchas gracias @v-yingjl,

Acepté su respuesta como solución la semana pasada con la esperanza de poder averiguar cómo enmendarla para acomodar la presencia de una segmentación de año, pero hasta ahora no he tenido éxito.

En el archivo de prueba .pbix filtré Años a 1981 - 2020 en PowerQuery (por simplicidad pensé, ahora me doy cuenta de que no debería haber hecho eso) pero quiero que mi informe real incluya una segmentación de año para que los usuarios puedan filtrar a, por ejemplo, los últimos 10 años sin tener que usar la barra de desplazamiento horizontal en un gráfico de línea visual si se selecciona una región diferente o períodos de tiempo.

Vea la captura de pantalla a continuación como ilustración + enlace a continuación para el informe publicado. ¿Puede aconsejarme cómo modificar su solución anterior en presencia de una cortadora de años?

Saludos infantiles, Bastiaan

WeatherHub.PNG

https://app.powerbi.com/view?r=eyJrIjoiMzc5OTQzNWQtNjdhMi00MzRkLWJhODItMmNhMTEyMDI2MjM2IiwidCI6ImExM...

Helpful resources

Announcements
Microsoft Fabric Learn Together

Microsoft Fabric Learn Together

Covering the world! 9:00-10:30 AM Sydney, 4:00-5:30 PM CET (Paris/Berlin), 7:00-8:30 PM Mexico City

PBI_APRIL_CAROUSEL1

Power BI Monthly Update - April 2024

Check out the April 2024 Power BI update to learn about new features.

April Fabric Community Update

Fabric Community Update - April 2024

Find out what's new and trending in the Fabric Community.