Forum Discussion
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. El objetivo detrás de esto es permitir que las condiciones se establezcan fuera de power bi, ya que las reglas y lógicas cambiarán con el tiempo sin necesidad de tocar la solución y hacerla más dinámica. Tengo una tabla de muestra a continuación que contiene información clave:
| Hipótesis | Condición | Conclusión | Resultado |
| Si | [Proveedor] - "Muestra1" | Entonces | "Muestra" |
| Si | [OrigOperatorId] á "brg" y [Sistema] - "AP" | Entonces | "Resultado1" |
| Si | [Sistema] - "AP" o [Sistema] - "PO" | Entonces | "APPO" |
Quiero convertir eso en algo como esto:
si [Proveedor] - "Sample1" a continuación, "Sample" else if [OrigOperatorId] - "brg" y [System] á "AP" entonces "Result1" else if [System] á "AP" o [System] - "PO" y luego "APPO" else ""
Por último, pasarlo a una columna personalizada que evalúa toda la cadena. Así que digamos si tengo una tabla de muestra como esta:
| Id | Proveedor | OrigOperatorId | Sistema |
| 1 | Muestra2 | S3 | tú |
| 2 | Muestra1 | Ir | Grr |
| 3 | Muestra3 | Brg | Ap |
| 4 | Muestra4 | Abeja | Ap |
La nueva columna condicional debe evaluar y devolver el resultado esperado de:
| Id | Proveedor | OrigOperatorId | Sistema | Prueba |
| 1 | Muestra2 | S3 | tú | |
| 2 | Muestra1 | Ir | Grr | Muestra |
| 3 | Muestra3 | Brg | Ap | Resultado1 |
| 4 | Muestra4 | Abeja | Ap | Appo |
¿Es esto posible? Creo que debería serlo. Cualquier ayuda sería muy apreciada!
@ImkeF
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
20 Replies
- ImkeF
Community Champion
- v-xuding-msft
Community Support
Hola @hnguyen76 ,
Puede crear una columna condicional. Cuando desee cambiar If Statement, solo tiene que hacer clic en ese paso en lugar de cambiar el código manualmente en el Editor avanzado.
Para obtener más información, puede hacer referencia al blog para probarlo.
https://radacad.com/conditional-column-in-power-bi-using-power-query-you-can-do-anything
- hnguyen76
Resolver II
Hola @v-xuding-msft ,
La idea es desarrollar una solución y hacerla "sin contacto". La condición cambia las horas extras y nos gustaría permitir que el propietario de un producto cree sus propias hipótesis/conclusiones que se generarán sin alterar nada dentro de Power BI. Puede suponer que los usuarios no tendrán la capacidad de puede cualquier modificación grande o pequeña a un modelo de producción.
- v-xuding-msft
Community Support
Hola @hnguyen76 ,
Desafortunadamente, como sé, no es compatible. Si realmente necesita esta característica implementada, puede enviar una idea en https://ideas.powerbi.com/ideas/.