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
delphinew
Helper III
Helper III

Gráfico de líneas por mes para el año actual y el año pasado

Hola a todos,

Tengo un problema con la creación de un gráfico de líneas simple para el actual y el año pasado con los meses en el eje X (no acumulativo).

Tengo mis 2 medidas que funcionan bien en tablas pivotantes:

- CA N YTD (año actual):

CALCULATE(Calculs[CA];
FILTER(
    ALL('Calendar');
    'Calendar'[Année]=MAX('Calendar'[Année])
    && 'Calendar'[Date] <= MAX('Calendar'[YTDmaxDate])
)
)

- CA N-1 (último año):

CALCULATE(Calculs[CA];
FILTER(
    ALL('Calendar');
    'Calendar'[Année]=MAX('Calendar'[Année])-1
)
)

La fecha máxima en mi calendario no es hoy, sino el final del año actual, por lo que creé un campo YTDmaxDate en mi calendario como se recomienda en otro mensaje que es la fecha de hoy (dd/mm) para cada año.

Traté de hacer el gráfico de líneas simple y aquí están los diversos resultados :

- mes utilizado es el campo de mes de la tabla de calendario

month as field.PNGMes utilizado es el campo de mes de la tabla Calendario

sólo se muestra el total de cada año

- el mes utilizado es el mes obtenido con la jerarquía de fechas que se construye automáticamente en la tabla de calendario ma:

month as date hierarchy.PNG

mismo problema

- mes utilizado es un campo de texto "mes" en mi tabla transacción:

month name as field in TRANSACTION.PNG

el problema aquí es que el mes se ordenan de manera muy extraña y no encontré ningún lugar para especificar la clasificación.

La medida genérica "CA" se calcula de esta manera:

CALCULATE (
    SUM('TRANSACTION'[V_CA_HT]);
    FILTER ('TRANSACTION';search("*vente*";'TRANSACTION'[V_type];;0)<>0)
)

Cuando lo utilicé en lugar de las medidas CA N YTD y CA N-1, tengo la repartición por mes al usar el mes obtenido por la jerarquía de fechas y el campo de mes de la tabla Calendario, pero por supuesto acumulando todos los años.

¿Alguien tiene una idea para solucionar este problema?

Muchas gracias por su ayuda,

Delphine

9 REPLIES 9
v-shex-msft
Community Support
Community Support

HI @delphinew,

Puede intentar utilizar las siguientes fórmulas de medida con el campo de fecha de calendario 'año', 'mes' parte como el eje de su gráfico de líneas:

CA N CYTD =
VAR _currDate =
    MAX ( 'Calendar'[Date] )
RETURN
    CALCULATE (
        Calculs[CA];
        FILTER (
            ALLSELECTED ( 'Calendar' );
            'Calendar'[Année] = YEAR ( _currDate )
                && 'Calendar'[Date] <= _currDate
        )
    )

CA N LYTD =
VAR _currDate =
    MAX ( 'Calendar'[Date] )
RETURN
    CALCULATE (
        Calculs[CA];
        FILTER (
            ALLSELECTED ( 'Calendar' );
            'Calendar'[Année]
                = YEAR ( _currDate ) - 1
                && 'Calendar'[Date] <= _currDate
        )
    )

saludos

Xiaoxin Sheng

Community Support Team _ Xiaoxin
If this post helps, please consider accept as solution to help other members find it more quickly.

hola @v-shex-msft

gracias por su mensaje. la fórmula del año pasado no funciona ni:

Capture.PNG

Capture2.PNG

pero entiendo la cosa: Necesito tener una fórmula diferente para el gráfico de líneas y la tabla dinámica.

Hola a todos,

Borré mi publicación anterior porque arreglé el problema: cuando escribo algunos comentarios o dejo algunas pruebas en el código usando /* * */, si hay algunos errores entre /* */, Power Bi intenta leerlos también, y termina en "se alcanzó el final de la salida".

Ahora tengo un gráfico de líneas como este:

Capture.PNG

Con

YTD Sales = CALCULATE(Calculs[CA];DATESYTD(('Calendar'[Date]);"12/31"))

CA LY = CALCULATE([YTD Sales];SAMEPERIODLASTYEAR('Calendar'[Date]))

//and this formula give the same result as YTD Sales which is reassuring:
CAYTD = 
VAR _currDate = MAX ('Calendar'[Date]) 
RETURN 
CALCULATE ( Calculs[CA]; 
FILTER ( 
    ALLSELECTED ( 'Calendar' ); 
    'Calendar'[Année] = YEAR ( _currDate ) 
    && 'Calendar'[Date] <= _currDate 
    ) 
    )

sin embargo, todas las fórmulas me dan las ventas acumuladas alcanzadas al final del mes, mientras que estoy tratando de tener sólo las ventas del mes para cada mes. ¿Qué debo hacer?

Muchas gracias

Delphine

HI @delphinew,

Si desea interrumpir el balanceo al final de cada mes, puede extraer el valor del mes de su campo de fecha como condición de filtro:

Current Year MTD =
VAR _currDate =
    MAX ( 'Calendar'[Date] )
RETURN
    CALCULATE (
        Calculs[CA];
        FILTER (
            ALLSELECTED ( 'Calendar' );
            YEAR ( 'Calendar'[Date] ) = YEAR ( _currDate )
                && MONTH ( 'Calendar'[Date] ) = MONTH ( _currDate )
                && 'Calendar'[Date] <= _currDate
        )
    )

saludos

Xiaoxin Sheng

Community Support Team _ Xiaoxin
If this post helps, please consider accept as solution to help other members find it more quickly.

hola @v-shex-msft lo siento por mi respuesta tardía, no estaba trabajando en Power BI estos últimos días.

gracias por su propuesta, probé su fórmula, pero todavía tengo la cantidad acumulada en el gráfico de líneas en lugar de la cantidad de cada mes.

Hola a todos,

Traté de solucionar este problema todo el día, parece que no puedo tener el resultado que deseo (y solía tener antes).

Me gustaría tener sin ningún filtro en la fecha hecha por un segmento :

- ventas de este año, pero no la cumul, las ventas reales por mes

- ventas del año anterior, ditto no la acumulación, las ventas actuales por mes

y al filtrar el año a través de un segmento, por ejemplo elijo 2017 como un año, en el mismo gráfico:

- las ventas mensuales de 2017

- las ventas de 2016 por mes

Cuando hago un FILTER(ALL(Calendar)...) o FILTER(ALL(Transaction)), todo lo que consigo tener es el total anual, sin el ALL, la medida no se muestra en el gráfico. Intenté con dateadd, sameperiodlastyear, datesinbetween, [date] < y >.

Si alguien tiene la respuesta sería genial, ya que es bastante molesto no ser capaz de reproducir lo que era una fórmula muy simple en mi software de BI anterior.

Hola a todos,

Sigo teniendo el error messae "se alcanzó el final de la entrada", incluso para un cálculo muy simple como este (tratando de calcular el completo paso a paso):

CA LY = 
CALCULATE(
    SUM('TRANSACTION'[V_CA_HT]); 
    FILTER('TRANSACTION';'TRANSACTION'[V_annee]=2019)
    )

Lo intenté con el número 2019 y "2019", sin ningún cambio en absoluto para el resultado. 'TRANSACTION'[V_annee] es un entero.

¿Qué me pierdo?

¡Muchas gracias!

Editar : evento esto me da el error:

TEST = SUM('TRANSACTION'[V_CA_HT])

or

TEST = SUMX('TRANSACTION';'TRANSACTION'[V_CA_HT])

pero el suyo me da el resultado correcto:

SUMX(
     FILTER('TRANSACTION'; SEARCH("*vente*";'TRANSACTION'[V_type];;0)<>0);
     'TRANSACTION'[V_CA_HT]
     )

or (same result)

CALCULATE (
    SUM('TRANSACTION'[V_CA_HT]);
    FILTER ('TRANSACTION';search("*vente*";'TRANSACTION'[V_type];;0)<>0)
    )
amitchandak
Super User
Super User

@delphinew

Con calendario de fecha tratar como

This Year =
var _max = maxx('Sales','Sales'[Date])
var _min = date(year(_max),1,1)

return
CALCULATE(SUM('Sales'[Sales]), FILTER(all('Date'), 'Date'[Date]<=_max && 'Date'[Date]>=_min))

last Year =
var _max1 = maxx('Sales','Sales'[Date])
var _max = date(year(_max1)-1,month(_max1),day(_max1))
var _min = date(year(_max),1,1)

return
CALCULATE(SUM('Sales'[Sales]), FILTER(all('Date'), 'Date'[Date]<=_max && 'Date'[Date]>=_min))

Lo ideal es usar la inteligencia del tiempo

YTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(('Date'[Date]),"12/31")) //change end date of year
This Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD((ENDOFYEAR('Date'[Date])),"12/31")) //change end date of year

Last YTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(dateadd('Date'[Date],-1,Year),"12/31")) //change end date of year
Last YTD complete Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(ENDOFYEAR(dateadd('Date'[Date],-1,Year)),"12/31")) //change end date of year
Last to last YTD Sales = CALCULATE(SUM(Sales[Sales Amount]),DATESYTD(dateadd('Date'[Date],-2,Year),"12/31")) //change end date of year

Year behind Sales = CALCULATE(SUM(Sales[Sales Amount]),dateadd('Date'[Date],-1,Year))

Para obtener lo mejor de la función de inteligencia de tiempo. Asegúrese de que tiene un calendario de fechas y se ha marcado como la fecha en la vista de modelo. Además, únase a él con la columna de fecha de su hecho/s. Consulte:
https://radacad.com/creating-calendar-table-in-power-bi-using-dax-functions
https://www.archerpoint.com/blog/Posts/creating-date-table-power-bi
https://www.sqlbi.com/articles/creating-a-simple-date-table-in-dax/

Hola @amitchandak gracias de nuevo por ayudarme! 🙂

Tengo un error con su fórmula del año pasado (el primero):

Mensaje de error:
MdxScript (Modelo) (146, 12) Error computacional en la medida 'Cálculos': el tipo de datos de un argumento DATE es incorrecto o el resultado es demasiado grande o demasiado pequeño.

También tengo un problema con su primera fórmula de este año: si filtro en otro año, me devuelve el volumen de negocios de todo el año y no el volumen de negocios de la YTD para ese año específico que no es el caso con la solución que encontré en ese foro:

ytd.PNG

Las ventas YTD, Estas fórmulas de ventas tienen el mismo problema.

Las últimas ventas YTD, las ventas completas de la última YTDy el año detrás de las fórmulas de ventas proporcionan las ventas del año anterior completo.

Creé mi calendario con Power Query siguiendo el tutorial aquí : https://exceleratorbi.com.au/build-reusable-calendar-table-power-query/ y añadiendo algunos campos que necesitaba, desde el que el YTDmaxDate (https://community.powerbi.com/t5/Desktop/YTD-of-years-until-today/m-p/1007419#M477421 . El código completo de mi calendario es el siguiente:

shared Calendar = let
Calendar = List.Dates(StartDate, NbJour+1, #duration(1, 0, 0, 0)),
#"Converti en table" = Table.FromList(Calendar, Splitter.SplitByNothing(), null, null, ExtraValues.List),
#"Colonnes renommées" = Table.RenameColumns(#"Converti en table",{{"Column1", "Date"}}),
#"Type modifié" = Table.TransformColumnTypes(#"Colonnes renommées",{{"Date", type date}}),
#"Colonnes supprimées" = Table.RemoveColumns(#"Type modifié",{"Column2"}),
StartDate = #date(2009, 1, 1),
EndDate = DateTime.Date(Date.EndOfYear(DateTime.LocalNow())),
NbJour = Duration.Days(EndDate - StartDate),
AffichageListeDates = #"Colonnes supprimées",
#"Année insérée" = Table.AddColumn(AffichageListeDates, "Année", each Date.Year([Date]), Int64.Type),
#"Mois inséré" = Table.AddColumn(#"Année insérée", "Mois", each Date.Month([Date]), Int64.Type),
#"Nom du mois inséré" = Table.AddColumn(#"Mois inséré", "Nom du mois", each Date.MonthName([Date]), type text),
#"Nb jr du mois insérés" = Table.AddColumn(#"Nom du mois inséré", "Nb jr du mois", each Date.DaysInMonth([Date]), Int64.Type),
#"Trimestre inséré" = Table.AddColumn(#"Nb jr du mois insérés", "Trimestre", each Date.QuarterOfYear([Date]), Int64.Type),
#"Semaine de l'année insérée" = Table.AddColumn(#"Trimestre inséré", "Semaine de l'année", each Date.WeekOfYear([Date]), Int64.Type),
#"Jour inséré" = Table.AddColumn(#"Semaine de l'année insérée", "Jour", each Date.Day([Date]), Int64.Type),
AnnéeMois = Table.AddColumn(#"Jour inséré", "AnnéeMois", each ([Année]-2000)*100+[Mois]),
MonthID = Table.AddColumn(AnnéeMois,"MonthID", each (Date.Year([Date])-Date.Year(StartDate))*12 + Date.Month([Date])),
#"Jour de la semaine inséré" = Table.AddColumn(MonthID, "Jour de la semaine", each Date.DayOfWeek([Date],Day.Monday)+1, Int64.Type),
#"Jour de l'année inséré" = Table.AddColumn(#"Jour de la semaine inséré", "Jour de l'année", each Date.DayOfYear([Date]), Int64.Type),
#"Fin de trimestre insérée" = Table.AddColumn(#"Jour de l'année inséré", "Fin du trimestre", each Date.EndOfQuarter([Date]), type date),
#"Début de trimestre inséré" = Table.AddColumn(#"Fin de trimestre insérée", "Début de trimestre", each Date.StartOfQuarter([Fin du trimestre]), type date),
#"Nb jours du trimestre ajoutée" = Table.AddColumn(#"Début de trimestre inséré", "Nb jours du trimestre", each (Date.AddDays([Fin du trimestre],1)-[Début de trimestre])),
#"Jr du trimestre ajoutée" = Table.AddColumn(#"Nb jours du trimestre ajoutée", "Jour du trimestre", each [Nb jours du trimestre]-([Fin du trimestre]-[Date])),
#"Type modifié1" = Table.TransformColumnTypes(#"Jr du trimestre ajoutée",{{"Nb jours du trimestre", Int64.Type}, {"Jour du trimestre", Int64.Type}}),
#"Colonnes permutées" = Table.ReorderColumns(#"Type modifié1",{"Date", "Année", "Mois", "Nom du mois", "Nb jr du mois", "Trimestre", "Semaine de l'année", "Jour", "AnnéeMois", "MonthID", "Jour de la semaine", "Jour de l'année", "Début de trimestre", "Fin du trimestre", "Nb jours du trimestre", "Jour du trimestre"})
in
#"Colonnes permutées";

las tablas Calendario y Transacción están vinculados junto con la fecha:

tables.png

¡Muchas gracias!

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.