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

Earn a 50% discount on the DP-600 certification exam by completing the Fabric 30 Days to Learn It challenge.

Reply
Anonymous
Not applicable

Cálculo del nivel de columna dinámica de Power BI

Hola, tengo una tabla base como debajo de la cual almacena los ingresos de mi organización. Esta tabla contiene datos de 2017 en adelante.

base_table1.PNG

Uno de mis informes solicitados de BA como el siguiente donde seleccionará cualquiera de los dos Month_Year consecutivos y la salida debe ser como a continuación.

output1.PNG

La salida anterior se muestra cuando se seleccionan los Month_Year de 20 y 20 de enero.

Lo que he hecho a partir de ahora es que, en el objeto visual Matrix, he puesto el campo Mes-Año en la parte Columna. Pero, ¿cómo puedo lograr el cálculo dinámico del nivel de mes?

¿Puede alguien ayudarme con él @Greg_Deckler

1 ACCEPTED SOLUTION
v-lid-msft
Community Support
Community Support

Hola @sahildoshi ,

Si quiere decir que la lógica de %Diff debe ser (4000-6000)/4000 a -33%, podemos intentar utilizar los siguientes pasos para cumplir con sus requisitos:

1. cree una tabla calculada:

Column Header Table = 
var startDate = MIN('Table'[Date])
var endDate = MAX('Table'[Date])
var t = FILTER(CALENDAR(DATE(YEAR(startDate),MONTH(startDate),1),DATE(YEAR(endDate),MONTH(endDate)+1,1)-1),DAY([Date])=1)
return 
ADDCOLUMNS(CROSSJOIN(DISTINCT('Table'[Component]),UNION(ADDCOLUMNS(t,"Month-Year",FORMAT([Date],"MMM-YYYY")),ADDCOLUMNS(t,"Month-Year","% Diff"))),"Sort Column",SWITCH([Month-Year],"% Diff",COUNTROWS(t)+1,RANKX(t,[Date],,ASC,Dense)))

2. Ordene la columna "Mes-Año" por "Ordenar columna"

8.jpg

3. cree una medida y utilíquela en la matriz visual:

Value Measure = 
VAR t =
    FILTER (
        ALLSELECTED ( 'Column Header Table' ),
        'Column Header Table'[Component]
            IN DISTINCT ( 'Column Header Table'[Component] )
    )
RETURN
    IF (
        ISINSCOPE ( 'Column Header Table'[Month-Year] ),
        SWITCH (
            SELECTEDVALUE ( 'Column Header Table'[Month-Year] ),
            "% Diff",
            VAR maxMonth =
                CALCULATETABLE (
                    DISTINCT ( 'Column Header Table'[Month-Year] ),
                    FILTER (
                        t,
                        'Column Header Table'[Sort Column]
                            = CALCULATE (
                                MAX ( 'Column Header Table'[Sort Column] ),
                                FILTER ( t, 'Column Header Table'[Month-Year] <> "% Diff" )
                            )
                    )
                )
            VAR minMonth =
                CALCULATETABLE (
                    DISTINCT ( 'Column Header Table'[Month-Year] ),
                    FILTER (
                        t,
                        'Column Header Table'[Sort Column]
                            = CALCULATE ( MIN ( 'Column Header Table'[Sort Column] ), t )
                    )
                )
            VAR valueInMaxMonth =
                CALCULATE (
                    SUM ( 'Table'[Amount Received] ),
                    FILTER (
                        'Table',
                        'Table'[Component] IN DISTINCT ( 'Column Header Table'[Component] )
                            && 'Table'[Month_Year] IN maxMonth
                    )
                )
            VAR valueInMinMonth =
                CALCULATE (
                    SUM ( 'Table'[Amount Received] ),
                    FILTER (
                        'Table',
                        'Table'[Component] IN DISTINCT ( 'Column Header Table'[Component] )
                            && 'Table'[Month_Year] IN minMonth
                    )
                )
            RETURN
                FORMAT ( valueInMaxMonth / valueInMinMonth - 1, "Percent" ),
            ""
                & CALCULATE (
                    SUM ( 'Table'[Amount Received] ),
                    FILTER (
                        'Table',
                        'Table'[Component] IN DISTINCT ( 'Column Header Table'[Component] )
                            && 'Table'[Month_Year] IN DISTINCT ( 'Column Header Table'[Month-Year] )
                    )
                )
        ),
        CALCULATE (
            SUM ( 'Table'[Amount Received] ),
            'Table'[Component] IN DISTINCT ( 'Table'[Component] )
        )
    )

9.jpg


Saludos

Community Support Team _ Dong Li
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.

View solution in original post

4 REPLIES 4
v-lid-msft
Community Support
Community Support

Hola @sahildoshi ,

Si quiere decir que la lógica de %Diff debe ser (4000-6000)/4000 a -33%, podemos intentar utilizar los siguientes pasos para cumplir con sus requisitos:

1. cree una tabla calculada:

Column Header Table = 
var startDate = MIN('Table'[Date])
var endDate = MAX('Table'[Date])
var t = FILTER(CALENDAR(DATE(YEAR(startDate),MONTH(startDate),1),DATE(YEAR(endDate),MONTH(endDate)+1,1)-1),DAY([Date])=1)
return 
ADDCOLUMNS(CROSSJOIN(DISTINCT('Table'[Component]),UNION(ADDCOLUMNS(t,"Month-Year",FORMAT([Date],"MMM-YYYY")),ADDCOLUMNS(t,"Month-Year","% Diff"))),"Sort Column",SWITCH([Month-Year],"% Diff",COUNTROWS(t)+1,RANKX(t,[Date],,ASC,Dense)))

2. Ordene la columna "Mes-Año" por "Ordenar columna"

8.jpg

3. cree una medida y utilíquela en la matriz visual:

Value Measure = 
VAR t =
    FILTER (
        ALLSELECTED ( 'Column Header Table' ),
        'Column Header Table'[Component]
            IN DISTINCT ( 'Column Header Table'[Component] )
    )
RETURN
    IF (
        ISINSCOPE ( 'Column Header Table'[Month-Year] ),
        SWITCH (
            SELECTEDVALUE ( 'Column Header Table'[Month-Year] ),
            "% Diff",
            VAR maxMonth =
                CALCULATETABLE (
                    DISTINCT ( 'Column Header Table'[Month-Year] ),
                    FILTER (
                        t,
                        'Column Header Table'[Sort Column]
                            = CALCULATE (
                                MAX ( 'Column Header Table'[Sort Column] ),
                                FILTER ( t, 'Column Header Table'[Month-Year] <> "% Diff" )
                            )
                    )
                )
            VAR minMonth =
                CALCULATETABLE (
                    DISTINCT ( 'Column Header Table'[Month-Year] ),
                    FILTER (
                        t,
                        'Column Header Table'[Sort Column]
                            = CALCULATE ( MIN ( 'Column Header Table'[Sort Column] ), t )
                    )
                )
            VAR valueInMaxMonth =
                CALCULATE (
                    SUM ( 'Table'[Amount Received] ),
                    FILTER (
                        'Table',
                        'Table'[Component] IN DISTINCT ( 'Column Header Table'[Component] )
                            && 'Table'[Month_Year] IN maxMonth
                    )
                )
            VAR valueInMinMonth =
                CALCULATE (
                    SUM ( 'Table'[Amount Received] ),
                    FILTER (
                        'Table',
                        'Table'[Component] IN DISTINCT ( 'Column Header Table'[Component] )
                            && 'Table'[Month_Year] IN minMonth
                    )
                )
            RETURN
                FORMAT ( valueInMaxMonth / valueInMinMonth - 1, "Percent" ),
            ""
                & CALCULATE (
                    SUM ( 'Table'[Amount Received] ),
                    FILTER (
                        'Table',
                        'Table'[Component] IN DISTINCT ( 'Column Header Table'[Component] )
                            && 'Table'[Month_Year] IN DISTINCT ( 'Column Header Table'[Month-Year] )
                    )
                )
        ),
        CALCULATE (
            SUM ( 'Table'[Amount Received] ),
            'Table'[Component] IN DISTINCT ( 'Table'[Component] )
        )
    )

9.jpg


Saludos

Community Support Team _ Dong Li
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
amitchandak
Super User
Super User

Con el calendario de fechas, puede usar totalmtd o fechas mtd y cambiar % en ese

Ventas de MTD: CALCULATE(SUM(Sales[Sales]),DATESMTD('Fecha'[Fecha]))
ventas de MTD más importantes: CALCULATE(SUM(Sales[Sales Amount]),DATESMTD(dateadd('Date'[Date],-1,MONTH)))

diff %-divide([MTD Sales ],[últimas ventas MTD]) -1

Anonymous
Not applicable

Hola @amitchandak , la fórmula dada produce una salida en blanco en el objeto visual. A continuación se muestran mis fórmulas. Por favor, avísame si me he perdido algo.

Ventas de MTD: CALCULATE(SUM('Detalles de acumulación'[Importe de acumulación]),DATESMTD(Date_Dim[Fecha]))
Ventas de última MTD: CALCULATE(SUM('Detalles de acumulación'[Importe de acumulación]),DATESMTD(DATEADD(Date_Dim[Fecha], -1, MES)))

En caso de que la dimensión de fecha no se inmovire en el mes actual y no esté utilizando un filtro de la dimensión de fecha. La fórmula MTD se ejecutará a partir de la fecha de finalización del calendario.

Así que tenga filtro de fecha o use un filtro de fecha relativa a nivel de página o visual.

Helpful resources

Announcements
RTI Forums Carousel3

New forum boards available in Real-Time Intelligence.

Ask questions in Eventhouse and KQL, Eventstream, and Reflex.

MayPowerBICarousel

Power BI Monthly Update - May 2024

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

LearnSurvey

Fabric certifications survey

Certification feedback opportunity for the community.