Forum Discussion
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
- Syndicate_Admin
Administrator
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. ✅
- Syndicate_Admin
Administrator
Está devolviendo el mismo valor 0.05 en todas las filas, consulte el archivo a continuación
https://drive.google.com/file/d/1BUukgLhD1-p6B5rRE5Gro3sPhq91wW86/view?usp=drive_link
- Syndicate_Admin
Administrator
¿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
Administrator
Hola @kushanNa ,
debe estar en DAX
- Syndicate_Admin
Administrator
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