Forum Discussion

Sylvine_Wyz's avatar
Sylvine_Wyz
Icon for Helper IV rankHelper IV
5 years ago
Solved

DAX DATEADD WEEK

Buenos días

Me gustaría crear una fórmula DAX que resuma solo las ventas de la semana pasada y una segunda fórmula que resume las ventas de la semana actual.

He creado la fórmula a continuación, pero me permite tener la cantidad total hasta 7 días antes? y no la semana pasada

CALCULATE ([Ventas TOTALes];D ATEADD (DATE[Date];-7;DAY))

Gracias de antemano.

  • No @Sylvine_Wyz,

    Según su descripción, desea agregar las ventas de la semana pasada a las ventas de esta semana. La condición previa es que tenga una columna de índice continuo, que se utiliza como condición de filtrado para obtener dinámicamente las ventas totales de la semana anterior.

    Por lo tanto, transformaré los datos en el editor de consultas y calcularé una columna Year_ Semana y, a continuación, agruparé por la columna Year_ Semana y agregaré la columna de índice, finalmente expandiré la tabla y quitaré columnas innecesarias.

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Zcy7CQAgDAXAXVIbMInfWcT91/CBjQ/bK24t8exZzdVMklTZ6SEHNaYADaYCKkwVNJna33dQMI2/n/faBw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [date = _t, sales = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"date", type date}, {"sales", Int64.Type}}),
    
        #"Added Custom" = Table.AddColumn(#"Changed Type", "week", each Date.WeekOfYear([date])),
    
        #"Added Conditional Column" = Table.AddColumn(#"Added Custom", "year_week", each if [week] < 10 then Date.Year([date])*1000+[week] else Date.Year([date])*100+[week]),
    
        #"Grouped Rows" = Table.Group(#"Added Conditional Column", {"year_week"}, {{"rank", each _, type table [date=nullable date, sales=nullable number, week=number, year_week=number]}}),
    
        #"Added Index" = Table.AddIndexColumn(#"Grouped Rows", "Index", 1, 1, Int64.Type),
    
        #"Expanded rank" = Table.ExpandTableColumn(#"Added Index", "rank", {"date", "sales", "week", "year_week"}, {"rank.date", "rank.sales", "rank.week", "rank.year_week"}),
    
        #"Removed Columns" = Table.RemoveColumns(#"Expanded rank",{"year_week", "rank.week"})
    in
        #"Removed Columns"

    Entonces podemos crear una medida como esta:

    Measure = 
    var current_week = MAX('Table'[Index])
    return 
    CALCULATE(
    SUM('Table'[rank.sales]),
    FILTER(ALL('Table'),
    'Table'[Index]=current_week||'Table'[Index]=current_week-1))

    Ejemplo .pbix

    Saludos
    Liang
    Si este post ayuda, entonces considera Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.

3 Replies

  • @Sylvine_Wyz , Por favor refiérase a mi blog y video para WOW

    Power BI — Semana a semana y WTD
    https://medium.com/@amitchandak.1978/power-bi-wtd-questions-time-intelligence-4-5-98c30fab69d3
    https://community.powerbi.com/t5/Community-Blog/Week-Is-Not-So-Weak-WTD-Last-WTD-and-This-Week-vs-Last-Week/ba-p/1051123

    https://www.youtube.com/watch?v=pnAesWxYgJ8

    Necesita nuevas columnas como estas en la tabla de fechas

    Fecha de inicio de la semana : 'Fecha'[Fecha]+-1*WEEKDAY('Date'[Fecha],2)+1
    Fecha de finalización de la semana : 'Fecha'[Fecha]+ 7-1*WEEKDAY('Date'[Fecha],2)
    Rango de la semana - RANKX(all('Date'),'Date'[Week Start date],,ASC,Dense)

    Medidas
    Esta semana: CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Week Rank]-max('Date'[Week Rank])
    Last Week ? CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Week Rank]-max('Date'[Week Rank])-1))
    Last year WeekTM CALCULATE(sum('order'[Qty]), FILTER(ALL('Date'),'Date'[Week Rank]-(max('Date'[Week Rank]) -52)))

  • AlB's avatar
    AlB
    Icon for Community Champion rankCommunity Champion

    No @Sylvine_Wyz

    Tratar

    Measure =
    VAR currentDate_ =
        MAX ( 'DATE'[Date] )
    RETURN
        CALCULATE (
            [TOTAL Ventes];
            DATESBETWEEN ( 'DATE'[Date]; currentDate_ - 14; currentDate_ - 8 )
        )

    Por favor, marque la pregunta resuelta cuando haya terminado y considere dar un pulgar hacia arriba 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

  • V-lianl-msft's avatar
    V-lianl-msft
    Icon for Community Support rankCommunity Support

    No @Sylvine_Wyz,

    Según su descripción, desea agregar las ventas de la semana pasada a las ventas de esta semana. La condición previa es que tenga una columna de índice continuo, que se utiliza como condición de filtrado para obtener dinámicamente las ventas totales de la semana anterior.

    Por lo tanto, transformaré los datos en el editor de consultas y calcularé una columna Year_ Semana y, a continuación, agruparé por la columna Year_ Semana y agregaré la columna de índice, finalmente expandiré la tabla y quitaré columnas innecesarias.

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("Zcy7CQAgDAXAXVIbMInfWcT91/CBjQ/bK24t8exZzdVMklTZ6SEHNaYADaYCKkwVNJna33dQMI2/n/faBw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [date = _t, sales = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"date", type date}, {"sales", Int64.Type}}),
    
        #"Added Custom" = Table.AddColumn(#"Changed Type", "week", each Date.WeekOfYear([date])),
    
        #"Added Conditional Column" = Table.AddColumn(#"Added Custom", "year_week", each if [week] < 10 then Date.Year([date])*1000+[week] else Date.Year([date])*100+[week]),
    
        #"Grouped Rows" = Table.Group(#"Added Conditional Column", {"year_week"}, {{"rank", each _, type table [date=nullable date, sales=nullable number, week=number, year_week=number]}}),
    
        #"Added Index" = Table.AddIndexColumn(#"Grouped Rows", "Index", 1, 1, Int64.Type),
    
        #"Expanded rank" = Table.ExpandTableColumn(#"Added Index", "rank", {"date", "sales", "week", "year_week"}, {"rank.date", "rank.sales", "rank.week", "rank.year_week"}),
    
        #"Removed Columns" = Table.RemoveColumns(#"Expanded rank",{"year_week", "rank.week"})
    in
        #"Removed Columns"

    Entonces podemos crear una medida como esta:

    Measure = 
    var current_week = MAX('Table'[Index])
    return 
    CALCULATE(
    SUM('Table'[rank.sales]),
    FILTER(ALL('Table'),
    'Table'[Index]=current_week||'Table'[Index]=current_week-1))

    Ejemplo .pbix

    Saludos
    Liang
    Si este post ayuda, entonces considera Aceptarlo como la solución para ayudar a los otros miembros a encontrarlo más rápidamente.