Forum Discussion

Syndicate_Admin's avatar
Syndicate_Admin
Icon for Administrator rankAdministrator
1 year ago

Previous_Value_as para Day_range

FechaAñoMesDay_RangeValor
09-11-20242024Nov1-1541.00
15-11-20242024Nov1-1543.00
25-11-20242024Nov16-3055.00
29-11-20242024Nov16-3058.00
03-12-20242024Dic1-1585.00
06-12-20242024Dic1-1515.00
29-12-20242024Dic16-3167.00
30-12-20242024Dic16-314.00
01-01-20252025Ene1-1510.00
02-01-20252025Ene1-1520.00
04-01-20252025Ene1-1521.50
05-01-20252025Ene1-1523.00
07-01-20252025Ene1-1550.00
08-01-20252025Ene1-1551.50
09-01-20252025Ene1-1521.00
10-01-20252025Ene1-1522.50
15-01-20252025Ene1-1558.00
17-01-20252025Ene16-31100.00
20-01-20252025Ene16-31101.50
22-01-20252025Ene16-31103.00
30-01-20252025Ene16-31104.50
01-02-20252025Feb1-15106.00
02-02-20252025Feb1-15107.50
03-02-20252025Feb1-1575.00
09-02-20252025Feb1-1576.50
10-02-20252025Feb1-1565.00
15-02-20252025Feb1-1566.50
18-02-20252025Feb16-2868.00
20-02-20252025Feb16-2869.50
22-02-20252025Feb16-2871.00
27-02-20252025Feb16-2872.50

Estos son mis datos.

AñoMesDay_RangeAvgPrev
2024Nov1-1542.00
16-3056.5042.00
Dic1-1550.0056.50
16-3135.5050.00
2025Ene1-1530.8335.50
16-31102.2530.83
Feb1-1582.75102.25
16-2870.2582.75

Este es el resultado que quiero.

Aquí quiero la columna de valor anterior. Aquí el problema es que en 30 días mes, 31 días mes y 28 días mes, 29 días mes.

Entonces, ¿cómo puedo resolver este problema? Por favor, sugiéreme.

2 Replies

  • Hii @MHTANK

    Puede lograr esto en Power Query (lenguaje M) siguiendo estos pasos:

    Enfoque de solución

    1. Agrupe los datos por año, mes y Day_Range y calcule el promedio (promedio).
    2. Ordene los datos agrupados por Año, Mes y Day_Range para garantizar el orden correcto.
    3. Agregue una columna para el promedio del período anterior (Anterior) haciendo referencia al valor promedio de la fila anterior.

    Solución paso a paso de Power Query

    1. Cargue sus datos en Power Query.
    2. Transforme los datos utilizando el siguiente código M:
    let
        // Load the data
        Source = YourTable,  
        
        // Group by Year, Month, and Day_Range and calculate the average value
        GroupedData = Table.Group(Source, {"Year", "Month", "Day_Range"}, 
            {{"Avg", each List.Average([Value]), type number}}),
        
        // Sort the table by Year, Month, and Day_Range
        SortedData = Table.Sort(GroupedData, {{"Year", Order.Ascending}, {"Month", Order.Ascending}, {"Day_Range", Order.Ascending}}),
    
        // Add Previous column using Index and referencing the previous row
        AddPrevColumn = Table.AddColumn(SortedData, "Prev", 
            each try SortedData[Avg]{List.PositionOf(SortedData[Avg], _)-1} otherwise null, 
            type nullable number
        )
        
    in
        AddPrevColumn

    Explicación del código

    1. Agrupa los datos por Año, Mes y Day_Range y calcula el Promedio (promedio de la columna Valor).
    2. Ordena la tabla para garantizar el orden cronológico correcto.
    3. Agrega la columna Prev de la siguiente manera:
      • Usar List.PositionOf para obtener el valor promedio de la fila anterior.
      • Usando try... de lo contrario, null para evitar errores en la primera fila donde no hay ningún valor anterior.

    Resultado esperado

    Año Mes Day_Range Promedio Prev

    2024Nov1-1542.00nulo
    2024Nov16-3056.5042.00
    2024Dic1-1550.0056.50
    2024Dic16-3135.5050.00
    2025Ene1-1530.8335.50
    2025Ene16-31102.2530.83
    2025Feb1-1582.75102.25
    2025Feb16-2870.2582.75

    • Syndicate_Admin's avatar
      Syndicate_Admin
      Icon for Administrator rankAdministrator

      Ya, esto es bueno,
      Pero quiero que esto quede en la matriz del informe.