Forum Discussion

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

Valor esperado

Estoy usando dos columnas yearmonth y value en la tabla visual como se muestra a continuación, necesito la tercera columna "expected_output" en la misma tabla que se resalta a continuación, esta tercera columna debe recoger el primer valor distinto de cero (ejemplo 0.05, 0.02, etc.) de la fila actual y completar ese mismo valor y todas las filas anteriores, incluida la fila actual

5 Replies

  • Hola @powerbiexpert22 ,

    Puede usar esta fórmula en la nueva columna calculada:

    Expected_Output =
    VAR CurrentYM = [YearMonth]
    VAR NonZeroTable =
    FILTRO (
    TODOS ( 'TuMesa' ),
    'TuTabla'[AñoMes] <= CurrentYM && 'TuTabla'[Valor] <> 0
    )
    VAR PrimeroNonZero =
    CALCULAR (
    MIN ( 'TuMesa' [AñoMes] ),
    NonZeroTable
    )
    DEVOLUCIÓN
    CALCULAR (
    MAX ( 'TuMesa'[Valor] ),
    FILTER ( ALL ( 'TuTabla' ), 'TuTabla'[AñoMes] = PrimerCero) )
    )

    Si esto resolvió su problema, márquelo como la solución aceptada. ✅

  • @powerbiexpert22

    ¿Se puede hacer esto en el lado de la consulta de poder? Entonces debería ser mucho más fácil que el DAX

    use estos pasos de código M

    let
        Source = Csv.Document(File.Contents("C:\XXXX\data.csv"),[Delimiter=",", Columns=2, Encoding=65001, QuoteStyle=QuoteStyle.None]),
        #"Promoted Headers" = Table.PromoteHeaders(Source, [PromoteAllScalars=true]),
        #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"yearmonth", Int64.Type}, {"value", type number}}),
        #"Sorted Rows" = Table.Sort(#"Changed Type",{{"yearmonth", Order.Descending}}),
        AddedIndex= Table.AddIndexColumn(#"Sorted Rows", "Index", 1, 1, Int64.Type),
     // Create a temporary column with 0/null replaced with null, others kept
        AddedTemp = Table.AddColumn(AddedIndex, "TempValue", each if [value] <> null and [value] <> 0 then [value] else null),
    
        // Fill down the cleaned column
        FilledDown = Table.FillDown(AddedTemp, {"TempValue"}),
    
        // Rename filled column
        Renamed = Table.RenameColumns(FilledDown, {{"TempValue", "FilledValue"}}),
        #"Sorted Rows1" = Table.Sort(Renamed,{{"yearmonth", Order.Ascending}})
    in
        #"Sorted Rows1"

      • Syndicate_Admin's avatar
        Syndicate_Admin
        Icon for Administrator rankAdministrator

        @powerbiexpert22

        Este código dax debería funcionar

        expected_output = 
        VAR temp =
            TOPN (
                1,
                FILTER (
                    Sheet1,
                    Sheet1[yearmonth] >= EARLIER ( Sheet1[yearmonth] ) &&
                    Sheet1[value] <> 0
                ),
                Sheet1[yearmonth], ASC
            )
        VAR result =
            MINX ( temp, Sheet1[value] )
        RETURN
            result