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

organizar bares según el mnth

Hola

Quiero organizar en enero de 2020 y enero de 2021 bar juntos.

greeshma_0-1613753713458.png

greeshma_1-1613754540115.png

1 ACCEPTED SOLUTION
Syndicate_Admin
Administrator
Administrator

@greeshma

Aquí hay una forma de hacer esto. Para este ejercicio, asumo que desea ver el mes actual junto al mismo mes del año anterior (así que estoy agrupando febrero de 2021 con febrero de 2020).

El ejemplo es un conjunto de datos simple con ventas por fecha y el modelo contiene una tabla de calendario:

Calendar Table.JPG
Sales table.JPG

Primero necesitamos crear una nueva tabla que incluya el mes adicional como una nueva fila (el mes que desea ver agrupado con su equivalente) para usarlo como eje del objeto visual.

Para ello creamos una nueva tabla que incluye la nueva fila (en el caso "Februrary 2021") y todos los períodos de la tabla de calendario. Dado que esta nueva fila sería la misma que una fila que ya tenemos en el conjunto de datos -en efecto, la estamos duplicando- necesitamos hacer que su valor sea diferente para evitar cualquier forma de agregación. En mi caso, todo lo que he hecho es incluir un espacio adicional entre el nombre del mes y el año. Esto lo hace diferente de los valores del conjunto de datos que solo tienen un espacio intermedio.

New Period.JPG

En esta nueva tabla de ejes, necesitamos el valor yearmonth, el nombre que deseamos usar en el objeto visual ("mes" en este ejemplo) y un vlue para poder ordenar la tabla para garantizar el orden correcto en el objeto visual ("orden")

Por lo tanto, el código para toda la tabla (incluido el código visto en la imagen anterior es):

Axis Table =
VAR CurrentMonth =
    MONTH ( TODAY () )
VAR PrevYear =
    YEAR ( TODAY () ) - 1
VAR PrevYearPeriod =
    ROW (
        "yearmonth",
             ( PrevYear ) * 100 + CurrentMonth,
        "month",
            FORMAT ( TODAY (), "MMMM" ) & "  " & PrevYear,
        "order", 10000000
    )
VAR CalTable =
    SELECTCOLUMNS (
        GROUPBY (
            'Calendar Table',
            'Calendar Table'[Year],
            'Calendar Table'[Month Name],
            'Calendar Table'[YearMonth]
        ),
        "yearmonth", 'Calendar Table'[YearMonth],
        "month",
            'Calendar Table'[Month Name] & " " & 'Calendar Table'[Year],
        "order", 'Calendar Table'[YearMonth]
    )
RETURN
    UNION ( CalTable, PrevYearPeriod )

Esto crea la tabla siguiente:

Axis Table.JPG

Puede omitir la columna "Período del eje": tuve que agregarla porque mi configuración regional no está en inglés y la función FORMAT devuelve el valor en español. Agregué esta columna para mantener los valores en inglés (así que ignórala y simplemente usa la columna Tabla de Axis [mes] como eje para el objeto visual)

Ahora unimos esta tabla axis con la tabla de calendario uniendo la columna Axis Table[order] y la columna Calendar Table [Yearmonth] en una relación de uno a varios y la hacemos inactiva

2021-02-20.png

Ahora podemos escribir crear la medida para lo visual (en mi caso una simple suma de ventas):

Values for visual =
VAR NewPeriodV =
    CALCULATE (
        [Sum of Sales],
        TREATAS ( VALUES ( 'Axis Table'[yearmonth] ), 'Calendar Table'[YearMonth] )
    )
VAR OtherPeriodV =
    CALCULATE (
        [Sum of Sales],
        USERELATIONSHIP ( 'Axis Table'[order], 'Calendar Table'[YearMonth] )
    )
RETURN
    IF (
        SELECTEDVALUE ( 'Axis Table'[order] ) = 10000000,
        NewPeriodV,
        OtherPeriodV
    )

Para el formato condicional de los colores:

Conditional Format =
VAR lastYearm =
    MAXX (
        FILTER ( ALL ( 'Axis Table' ), 'Axis Table'[order] < 10000000 ),
        'Axis Table'[yearmonth]
    )
VAR Calc =
    IF (
        SELECTEDVALUE ( 'Axis Table'[order] ) = 10000000,
        1,
        IF ( SELECTEDVALUE ( 'Axis Table'[yearmonth] ) = lastYearm, 1 )
    )
RETURN
    Calc

y la siguiente medida para filtrar el objeto visual. Esta medida debe agregar a los "filtros en este objeto visual" en el panel de filtro y establecer el valor en 1:

Calendar Slicer filter = 
VAR CalYM = VALUES('Calendar Table'[YearMonth])
VAR AxisTYM = VALUES('Axis Table'[yearmonth])
RETURN
COUNTROWS(
    INTERSECT(CalYM, AxisTYM))

y obtienes esto:result.JPG

He adjuntado el archivo PBIX de ejemplo para su referencia

View solution in original post

3 REPLIES 3
Syndicate_Admin
Administrator
Administrator

Hola

Dependiendo de cómo se organicen los datos y de las medidas que haya escrito, es posible que desee arrastrar Mes y, a continuación, Años desde la tabla Calendario hasta el eje X del objeto visual. De esta manera para cada mes, verá 2 columnas - una para el año actual y otra para el año anterior.

Syndicate_Admin
Administrator
Administrator

@greeshma

Aquí hay una forma de hacer esto. Para este ejercicio, asumo que desea ver el mes actual junto al mismo mes del año anterior (así que estoy agrupando febrero de 2021 con febrero de 2020).

El ejemplo es un conjunto de datos simple con ventas por fecha y el modelo contiene una tabla de calendario:

Calendar Table.JPG
Sales table.JPG

Primero necesitamos crear una nueva tabla que incluya el mes adicional como una nueva fila (el mes que desea ver agrupado con su equivalente) para usarlo como eje del objeto visual.

Para ello creamos una nueva tabla que incluye la nueva fila (en el caso "Februrary 2021") y todos los períodos de la tabla de calendario. Dado que esta nueva fila sería la misma que una fila que ya tenemos en el conjunto de datos -en efecto, la estamos duplicando- necesitamos hacer que su valor sea diferente para evitar cualquier forma de agregación. En mi caso, todo lo que he hecho es incluir un espacio adicional entre el nombre del mes y el año. Esto lo hace diferente de los valores del conjunto de datos que solo tienen un espacio intermedio.

New Period.JPG

En esta nueva tabla de ejes, necesitamos el valor yearmonth, el nombre que deseamos usar en el objeto visual ("mes" en este ejemplo) y un vlue para poder ordenar la tabla para garantizar el orden correcto en el objeto visual ("orden")

Por lo tanto, el código para toda la tabla (incluido el código visto en la imagen anterior es):

Axis Table =
VAR CurrentMonth =
    MONTH ( TODAY () )
VAR PrevYear =
    YEAR ( TODAY () ) - 1
VAR PrevYearPeriod =
    ROW (
        "yearmonth",
             ( PrevYear ) * 100 + CurrentMonth,
        "month",
            FORMAT ( TODAY (), "MMMM" ) & "  " & PrevYear,
        "order", 10000000
    )
VAR CalTable =
    SELECTCOLUMNS (
        GROUPBY (
            'Calendar Table',
            'Calendar Table'[Year],
            'Calendar Table'[Month Name],
            'Calendar Table'[YearMonth]
        ),
        "yearmonth", 'Calendar Table'[YearMonth],
        "month",
            'Calendar Table'[Month Name] & " " & 'Calendar Table'[Year],
        "order", 'Calendar Table'[YearMonth]
    )
RETURN
    UNION ( CalTable, PrevYearPeriod )

Esto crea la tabla siguiente:

Axis Table.JPG

Puede omitir la columna "Período del eje": tuve que agregarla porque mi configuración regional no está en inglés y la función FORMAT devuelve el valor en español. Agregué esta columna para mantener los valores en inglés (así que ignórala y simplemente usa la columna Tabla de Axis [mes] como eje para el objeto visual)

Ahora unimos esta tabla axis con la tabla de calendario uniendo la columna Axis Table[order] y la columna Calendar Table [Yearmonth] en una relación de uno a varios y la hacemos inactiva

2021-02-20.png

Ahora podemos escribir crear la medida para lo visual (en mi caso una simple suma de ventas):

Values for visual =
VAR NewPeriodV =
    CALCULATE (
        [Sum of Sales],
        TREATAS ( VALUES ( 'Axis Table'[yearmonth] ), 'Calendar Table'[YearMonth] )
    )
VAR OtherPeriodV =
    CALCULATE (
        [Sum of Sales],
        USERELATIONSHIP ( 'Axis Table'[order], 'Calendar Table'[YearMonth] )
    )
RETURN
    IF (
        SELECTEDVALUE ( 'Axis Table'[order] ) = 10000000,
        NewPeriodV,
        OtherPeriodV
    )

Para el formato condicional de los colores:

Conditional Format =
VAR lastYearm =
    MAXX (
        FILTER ( ALL ( 'Axis Table' ), 'Axis Table'[order] < 10000000 ),
        'Axis Table'[yearmonth]
    )
VAR Calc =
    IF (
        SELECTEDVALUE ( 'Axis Table'[order] ) = 10000000,
        1,
        IF ( SELECTEDVALUE ( 'Axis Table'[yearmonth] ) = lastYearm, 1 )
    )
RETURN
    Calc

y la siguiente medida para filtrar el objeto visual. Esta medida debe agregar a los "filtros en este objeto visual" en el panel de filtro y establecer el valor en 1:

Calendar Slicer filter = 
VAR CalYM = VALUES('Calendar Table'[YearMonth])
VAR AxisTYM = VALUES('Axis Table'[yearmonth])
RETURN
COUNTROWS(
    INTERSECT(CalYM, AxisTYM))

y obtienes esto:result.JPG

He adjuntado el archivo PBIX de ejemplo para su referencia

Syndicate_Admin
Administrator
Administrator

@greeshma

¿La agrupación debe ser dinámica? Si es así, ¿bajo qué criterios?

Va a tener que crear una tabla personalizada como eje, por lo que necesitamos definir los criterios para la agrupación de meses.

¿Puede publicar una imagen de la tabla de fechas y del modelo?

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.