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
ElChambre20
Frequent Visitor

Calcular el promedio de las fechas de uso a partir de una medida

Hola a todos

Soy relativamente nuevo en Power BI (solo se ha estado usando durante 5 meses).

Estoy tratando con datos relacionados con encuestas del sitio, y a cada encuesta se le asigna una puntuación basada en su calidad.

Se me ha pedido que rastree la puntuación media a lo largo del tiempo, que era lo suficientemente simple como para hacerlo usando la siguiente medida:

EN LA ENCUESTA ACC_2 ?
CALCULATE(
PROMEDIO(
CalcTableSiteVisitsWithRatings[AtSurveyRiskRatingReverseRank]
),
FILTRO(
ALLSELECTED('Fecha'),
'Date'[Fecha]<-MAX('Fecha'[Fecha])
)
)
Esto funcionó bien hasta que me aconsejaron que no queremos incluir encuestas repetidas. Así que en cualquier momento, ¿cuál fue la puntuación media de la encuesta de las encuestas más recientes realizadas.
Así que pensé que lo primero que tenía que hacer era averiguar cuál era la fecha de la última encuesta realizada dependiendo del año y se le ocurrió esta medida:
EN LA ENCUESTA LAST_SURVEY ?
CALCULATE(
máximo:
CalcTableSiteVisitsWithRatings[EventDate]),
FILTRO(
ALLSELECTED('Fecha'),
'Fecha'[Fecha]<-MAX('Fecha'[Fecha]
)
)
)
Como ejemplo, esto es lo que devuelve esa medida cuando la pongo en una matriz:
LocationID20152016201720182019
1 14/04/201615/03/201715/03/201701/04/2019
201/06/201501/06/201529/05/201703/06/201803/06/2018
3 11/11/201711/11/201714/10/2019

Como puedes ver haciendo exactamente lo que quiero, en cada año regresando la fecha de la encuesta más reciente para cada loaction hasta ese año. Lo que tengo que hacer ahora es devolver las puntuaciones de la encuesta para esas encuestas para que pueda promediarlas. Aquí es donde me he quedado completamente atascado. El objetivo final es trazar la puntuación media de la encuesta a lo largo del tiempo en un gráfico de líneas, pero solo cada uno utilizando la encuesta más reciente realizada.

He intentado calcular el promedio de la puntuación en la que la fecha del evento es la medida anterior, pero simplemente no devuelve ningún dato.

Lo sentimos, esto fue bastante largo viento y si no me he explicado muy bien por favor hágamelo saber y voy a proporcionar cualquier información adicional requerida.

Gracias de antemano

1 ACCEPTED SOLUTION

Hola @AlB ,

Después de ajustar su medida variar ligeramente lo conseguí para trabajar!

AT SURVEY ACC_3 = 
CALCULATE (
    AVERAGEX (
        FILTER (
            CalcTableSiteVisitsWithRatings,
            VAR currentYear_ =
                CALCULATE(
                    MAX ( 'Date'[Date] ),
                    ALLSELECTED('Date')
                )
            VAR latestInYear_ =
                CALCULATE (
                    MAX ( CalcTableSiteVisitsWithRatings[EventDate] ),
                    CalcTableSiteVisitsWithRatings[EventDate]  <= currentYear_,
                    ALLEXCEPT (
                        CalcTableSiteVisitsWithRatings,
                        CalcTableSiteVisitsWithRatings[LocationID]
                    )
                )
            RETURN
                IF (
                    CalcTableSiteVisitsWithRatings[EventDate] = latestInYear_,
                    TRUE (),
                    FALSE ()
                )
        ),
        CalcTableSiteVisitsWithRatings[AtSurveyRiskRatingReverseRank]
    ),
    FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)

Cambié currentYear_ para resolver la última fecha del año desde la tabla Date en lugar de usar el eventdate, luego cambié latestInYear a MAX las fechas hasta e incluyendo currentYear_

Ahora estoy obteniendo el resultado deseado. Muchas gracias por su ayuda, estuviste increíblemente cerca teniendo en cuenta mi descripción menos que ideal del problema 🙂 también he aprendido mucho de jugar con su medida.

View solution in original post

4 REPLIES 4
AlB
Super User
Super User

Hola @ElChambre20

Una opción sería crear una versión filtrada de la tabla original, seleccionando solo las filas que tienen la última encuesta para cada año (para cada identificador de ubicación, si lo entiendo correctamente). A continuación, ejecute un AVERAGEX en esa tabla. Algo en la línea de:

Measure =
CALCULATE (
    AVERAGEX (
        FILTER (
            CalcTableSiteVisitsWithRatings,
            VAR currentYear_ =
                YEAR ( CalcTableSiteVisitsWithRatings[EventDate] )
            VAR latestInYear_ =
                CALCULATE (
                    MAX ( CalcTableSiteVisitsWithRatings[EventDate] ),
                    YEAR ( CalcTableSiteVisitsWithRatings[EventDate] ) = currentYear_,
                    ALLEXCEPT (
                        CalcTableSiteVisitsWithRatings,
                        CalcTableSiteVisitsWithRatings[LocationID]
                    )
                )
            RETURN
                IF (
                    CalcTableSiteVisitsWithRatings[EventDate] = latestInYear_,
                    TRUE (),
                    FALSE ()
                )
        ),
        CalcTableSiteVisitsWithRatings[AtSurveyRiskRatingReverseRank]
    ),
    FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)

que sigue la lógica de la primera medida, pero agregando el filtrado en la tabla base para el AVERAGEX para seleccionar solo las últimas encuestas por año. Necesitaría datos para realizar una prueba rápida. Puede ajustarlo usted mismo según sea necesario.

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Gracias @AlB ,

Gracias por la medida que escribiste, ciertamente aprendí una cosa o 2 sobre filtrar la tabla antes de calcular el promedio por lo que ha sido realmente útil.

Desafortunadamente, he estado jugando con la medida que usted proporcionó durante unas horas y por desgracia todavía está devolviendo el promedio de todas las encuestas hasta e incluyendo el año actual, no sólo la última encuesta:

ElChambre20_0-1602495523133.png

Si ves, en la segunda fila, la encuesta de 2017 tenía una puntuación de 4, así que me gustaría que mostrara 4 aquí, pero está mostrando 3.5 ya que es el promedio de las encuestas 2016 (Puntuación 3) y 2017 (Puntuación 4).

He intentado ajustar su medida yo mismo, pero tengo miedo de que realmente no he llegado a ninguna parte con ella. Traté de ajustarlo a en lugar de resolver el promedio, simplemente devolver un "1" donde la fecha del evento era la última fecha (Usando un SUMX en lugar de AVERAGEX) y luego usarlo como un filtro, pero tampoco funcionó.

Cualquier otra ayuda que pueda proporcionar sería muy apreciada.

Gracias

@ElChambre20

Necesitaría algunos datos de muestra para probar la medida en ese entonces. Y una explicación clara de cuál es el resultado esperado en los datos de la muestra y por qué. No estoy seguro de haber entendido completamente los requisitos.

Proporcione sus datos de ejemplo en formato text-tabular además de (o en lugar de) las capturas de pantalla para que se puedan copiar fácilmente.

Por favor, marque la pregunta resuelta cuando haya terminado y considere dar felicitaciones si las publicaciones son útiles.

Póngase en contacto conmigo de forma privada para obtener asistencia con cualquier necesidad de BI a gran escala, tutoría, etc.

Salud

SU18_powerbi_badge

Hola @AlB ,

Después de ajustar su medida variar ligeramente lo conseguí para trabajar!

AT SURVEY ACC_3 = 
CALCULATE (
    AVERAGEX (
        FILTER (
            CalcTableSiteVisitsWithRatings,
            VAR currentYear_ =
                CALCULATE(
                    MAX ( 'Date'[Date] ),
                    ALLSELECTED('Date')
                )
            VAR latestInYear_ =
                CALCULATE (
                    MAX ( CalcTableSiteVisitsWithRatings[EventDate] ),
                    CalcTableSiteVisitsWithRatings[EventDate]  <= currentYear_,
                    ALLEXCEPT (
                        CalcTableSiteVisitsWithRatings,
                        CalcTableSiteVisitsWithRatings[LocationID]
                    )
                )
            RETURN
                IF (
                    CalcTableSiteVisitsWithRatings[EventDate] = latestInYear_,
                    TRUE (),
                    FALSE ()
                )
        ),
        CalcTableSiteVisitsWithRatings[AtSurveyRiskRatingReverseRank]
    ),
    FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)

Cambié currentYear_ para resolver la última fecha del año desde la tabla Date en lugar de usar el eventdate, luego cambié latestInYear a MAX las fechas hasta e incluyendo currentYear_

Ahora estoy obteniendo el resultado deseado. Muchas gracias por su ayuda, estuviste increíblemente cerca teniendo en cuenta mi descripción menos que ideal del problema 🙂 también he aprendido mucho de jugar con su medida.

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.