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
Syndicate_Admin
Administrator
Administrator

Calcular el % de cambio de la fila anterior en función de varias columnas

Buenos días

Necesito mostrar análisis (% de cambio de espectadores totales por episodio) para diferentes paquetes (Oro, Plata, Bronce). El título y la estación del episodio no importan. Mis datos de muestra están por debajo y la salida esperada (% de cambio por episodio) se proporciona a partir de entonces.

* Tenga en cuenta que el número de títulos / en qué paquete se transmiten varía según el episodio.

He podido obtener una solución torpe mediante: duplicar la tabla, filtrar en un paquete, agrupar por número de episodio, agregar un índice, crear una columna calculada que haga referencia al episodio anterior (por índice) y luego calcular el % de cambio por episodio. La desventaja es que tendría que hacer esto para todos los paquetes (mi conjunto de datos real tiene 7 paquetes), y luego crear visualizaciones separadas para cada tabla, por lo que no hay interactividad del usuario. ¿Esperaba que hubiera una solución más elegante?

Datos de muestra:

TítuloPaqueteNúmero de episodioEstaciónEspectadores
ProgramaOro101A30
ResúmenesOro101A25
ProgramaPlata101A50
ResúmenesPlata101A70
ResúmenesBronce101A40
ProgramaOro101B15
ResúmenesOro101B10
ProgramaPlata101B40
ResúmenesPlata101B30
ResúmenesBronce101B20
ProgramaOro102A20
ResúmenesOro102A40
ProgramaPlata102A60
ResúmenesPlata102A55
ResúmenesBronce102A65
ProgramaOro101B10
ResúmenesOro101B20
ProgramaPlata101B25
ResúmenesBronce101B15
ProgramaOro103A20
ResúmenesOro103A15
ProgramaPlata103A45
ResúmenesBronce103A15

Salida esperada (% de cambio en espectadores por episodio):

AnnieTay_0-1632151831493.png

Gracias de antemano por su tiempo y experiencia.

3 ACCEPTED SOLUTIONS

Hay @AnnieTay ,

Primero cree una tabla de episodios y no cree una relación entre;

A continuación, cree una medida como la siguiente:

Measure =
VAR _previous =
    CALCULATE (
        MAX ( 'Table'[Episode number] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Episode number] < MAX ( 'Table'[Episode number] )
        )
    )
VAR _previoussum =
    CALCULATE (
        SUM ( 'Table'[Viewers] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Episode number] = _previous
                && 'Table'[Package] IN FILTERS ( Slicer[Package] )
        )
    )
VAR _currentsum =
    CALCULATE (
        SUM ( 'Table'[Viewers] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Episode number] = MAX ( 'Table'[Episode number] )
                && 'Table'[Package] IN FILTERS ( Slicer[Package] )
        )
    )
RETURN
    IF (
        _previous = BLANK (),
        BLANK (),
        DIVIDE ( _currentsum - _previoussum, _previoussum )
    )

Y verás:

vkellymsft_0-1632378772706.png

Para el archivo .pbix relacionado, pls ver adjunto.

Saludos
Kelly

¿Respondí a su pregunta? ¡Marque mi respuesta como una solución!

View solution in original post

Gracias @v-kelly-msft

Mientras tanto, a mi colega se le ocurrió otra solución que permite que tanto los visores como el % de cambio se actualicen desde la misma segmentación de datos:

WoW % Cambio =
VAR CurrentEpisode = SELECTEDVALUE('Tabla'[Número de episodio])
VAR AnteriorEpisode = CurrentEpisode -1
VAR CurrentEpisodeScore = SUM('Tabla'[Espectadores])
VAR PreviousEpisodeScore = CALCULATE( SUM('Table'[Viewers]) , 'Table'[Episode number] = PreviousEpisode)
VAR wow = DIVIDE( CurrentEpisodeScore - previousEpisodeScore , previousEpisodeScore )
DEVOLUCIÓN
Uau
Esta solución también permite un análisis adicional por título o estación, si es necesario (consulte la comparación entre las dos medidas a continuación):
AnnieTay_0-1632381153525.png

Gracias de nuevo por su aportación.

View solution in original post

Hay @AnnieTay ,

Buena solución, pero una cosa debe recordarse, si el número de episodio anterior no es igual al actual menos 1, entonces la solución devolverá el error, puede verificar mi solución que evitará dicho error.

Si crees que mi solución también es buena, espero que también puedas marcar mi respuesta como respondida para que más personas la encuentren.

Gracias de antemano.

Saludos
Kelly

¿Respondí a su pregunta? ¡Marque mi respuesta como una solución!

View solution in original post

5 REPLIES 5
Syndicate_Admin
Administrator
Administrator

@AnnieTay , si lo necesita solo en función del episodio. Mejor crear una tabla con un episodio distinto y unirlo con el episodio de esta tabla.

entonces

medida =

var _1 = suma(Tabla[Visor])

var _2 = calculate(_1, filter(all(Episode), Episode [Episode] = maX(Episode[Episode])-1))

devolución

dividir(_2,_1)

Gracias @amitchandak

No estoy seguro de lo que estoy haciendo mal, creé una tabla de episodios (Distinct), vinculada a mis datos y la medida, pero la medida se muestra al 100% independientemente del contexto del filtro.

La medida:

% Cambio =
var _1 = suma('Tabla'[Espectadores])
var _2 = calculate(_1, filter(all(Episode), Episode[Episode number] = MAX(Episode[Episode number])-1))
devolución
dividir(_2,_1)

Modelo Mis datos:

AnnieTay_0-1632167106079.png

Gracias de nuevo por su tiempo.

Hay @AnnieTay ,

Primero cree una tabla de episodios y no cree una relación entre;

A continuación, cree una medida como la siguiente:

Measure =
VAR _previous =
    CALCULATE (
        MAX ( 'Table'[Episode number] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Episode number] < MAX ( 'Table'[Episode number] )
        )
    )
VAR _previoussum =
    CALCULATE (
        SUM ( 'Table'[Viewers] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Episode number] = _previous
                && 'Table'[Package] IN FILTERS ( Slicer[Package] )
        )
    )
VAR _currentsum =
    CALCULATE (
        SUM ( 'Table'[Viewers] ),
        FILTER (
            ALL ( 'Table' ),
            'Table'[Episode number] = MAX ( 'Table'[Episode number] )
                && 'Table'[Package] IN FILTERS ( Slicer[Package] )
        )
    )
RETURN
    IF (
        _previous = BLANK (),
        BLANK (),
        DIVIDE ( _currentsum - _previoussum, _previoussum )
    )

Y verás:

vkellymsft_0-1632378772706.png

Para el archivo .pbix relacionado, pls ver adjunto.

Saludos
Kelly

¿Respondí a su pregunta? ¡Marque mi respuesta como una solución!

Gracias @v-kelly-msft

Mientras tanto, a mi colega se le ocurrió otra solución que permite que tanto los visores como el % de cambio se actualicen desde la misma segmentación de datos:

WoW % Cambio =
VAR CurrentEpisode = SELECTEDVALUE('Tabla'[Número de episodio])
VAR AnteriorEpisode = CurrentEpisode -1
VAR CurrentEpisodeScore = SUM('Tabla'[Espectadores])
VAR PreviousEpisodeScore = CALCULATE( SUM('Table'[Viewers]) , 'Table'[Episode number] = PreviousEpisode)
VAR wow = DIVIDE( CurrentEpisodeScore - previousEpisodeScore , previousEpisodeScore )
DEVOLUCIÓN
Uau
Esta solución también permite un análisis adicional por título o estación, si es necesario (consulte la comparación entre las dos medidas a continuación):
AnnieTay_0-1632381153525.png

Gracias de nuevo por su aportación.

Hay @AnnieTay ,

Buena solución, pero una cosa debe recordarse, si el número de episodio anterior no es igual al actual menos 1, entonces la solución devolverá el error, puede verificar mi solución que evitará dicho error.

Si crees que mi solución también es buena, espero que también puedas marcar mi respuesta como respondida para que más personas la encuentren.

Gracias de antemano.

Saludos
Kelly

¿Respondí a su pregunta? ¡Marque mi respuesta como una solución!

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.