Forum Discussion

hnguyen76's avatar
hnguyen76
Icon for Resolver II rankResolver II
6 years ago
Solved

Power Query Configurable / Dynamic If (instrucción) If

Hola a todos. Intento crear una lista de configuración que puedo convertir en una sola instrucción y, a continuación, hacer que una columna personalizada ingiere esa lógica y evaluar si es posible. ...
  • ImkeF's avatar
    ImkeF
    6 years ago

    Gracias @artemus ,

    que elude muy bien la combinación de las dependencias forumula con el contexto de fila.

    ¿Se trata de una limitación general al usar Expression.Evaluate o cree que el error se debe a alguna configuración específica dentro de este ejemplo?

    @hnguyen76 ,

    Lo he reescrito ligeramente para que sea más fácil intercambiar el código de ejemplo con sus datos reales.
    Además, he incluido una declaración "List.Select" para obtener el valor correcto de las condiciones evaluadas:


    let
        ConditionsFromExcelTable = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WykxT0lGKDkvNS8kvilWwVYhRCk7MLchJNYxRAkqUZKTmASmIkFKsDky9f1Fmun9BalFiSX6RZwpEX1JReoySQmJeikJ0cGVxSWouRNgxANmkoNTi0pwSQySj0NUq5BehGhDgj2yAY0CAP0J3SGpFiZ5zfl5JYmZesQbMGzoKcG8YxShpYvojFgA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Hypothesis = _t, Condition = _t, Conclusion = _t, Result = _t]),
        
        AddFunctionColumToConditions = let
            Source = ConditionsFromExcelTable,
            #"Changed Type" = Table.TransformColumnTypes(Source,{{"Hypothesis", type text}, {"Condition", type text}, {"Conclusion", type text}, {"Result", type text}}),
            GenerateFunctions = Table.AddColumn(#"Changed Type", "Function", each Expression.Evaluate("each if " & [Condition] & " then """ & [Result] & """ else null", [Text.Contains = Text.Contains, Comparer.OrdinalIgnoreCase = Comparer.OrdinalIgnoreCase]))
        in
            GenerateFunctions,
    
        SourceData = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMlTSUQpOzC3ISTUCsYyBhG9inlKsTrSSEVwKpCg9H0i4FwWBpYzhUiBWUlE6kHQMAEuZwKVArKTUVKhULAA=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, Vendor = _t, OrigOperatorId = _t, System = _t]),
        #"Changed Type" = Table.TransformColumnTypes(SourceData,{{"Vendor", type text}, {"OrigOperatorId", type text}, {"System", type text}}),
    
        Evaluate = Table.AddColumn(
            #"Changed Type", 
            "Custom", 
            each List.First(List.Select(List.Transform(AddFunctionColumToConditions[Function], (fn) => fn(_)), each _ <> null))
            )
    in
        Evaluate