jueves, 20 de abril de 2017

Condicionales Personalizados con Power Query

Al hilo de la entrada anterior, donde hablamos de la funcionalidad de Añadir una columna condicional dentro de una consulta de Power Query, aprenderemos a generar un condicional más elaborado, con condiciones múltiples.
Partimos de nuestro mismo origen de datos, donde hemos creado nuestra Consulta:


Accedemos al menú de Agregar Columna > grupo General > botón Columna personalizada,
lo que nos abre la ventana de la imagen anterior, donde escribiremos:
= if [Producto]="Pdto01" then "1,23"
else if [Producto]="Pdto02" then "2,34"
else if [Producto]="Pdto03" then "3,45"
else "0"

código que replicaría la funcionalidad de Columna condicional que vimos en el post anterior.
Esto sin embargo, tiene ventajas añadidas, ya que podemos construir condicionales más complejos o compuestos de múltiples variables (empleando los operadores lógicos OR o bien AND).


Un ejemplo, en caso de que el comercial sea el 'AAA' y su zona de venta sea 'SUR' aplicamos un porcentaje de comisión del 5%, si el comercial es el 'AAA' y la zona es 'NORTE' el 10%. Al resto de comerciales, independientemente de su zona de venta, aplicamos una comisión del 1%.
Esta sería la fórmula a crear:
=if [Comercial]="AAA" then
     if [Zona]="Sur" then "0,05"
     else if [Zona]="Norte" then "0,10"
     else "0"
else "0,01"



O también, empleando los operadores lógicos y un orden concreto de ejecución, la fórmula:
=if [Comercial]="AAA" and [Zona]="Sur" then "0,05"
else if [Comercial]="AAA" and [Zona]="Norte" then "0,10"
else if [Comercial]="AAA" then "0"
else "0,01"


Con igual resultado que la anterior:



Como podemos comprobar, personalizar nuestras columnas, nos aporta una flexibilidad infinitamente mayor que la simple 'Columna condicional'.

No olvides cambiar el tipo de datos de nuestras columnas a Número decimal para trabajarlos fácilmente como números...

4 comentarios:

  1. Por varios días he intentado colocar condiciones para que de forma automática se genere un resultado, realmente muy buena su explicación y bastante práctica y sencilla la aplicación para resolver muchas cosas. Con esto prácticamente estoy a punto de procesar todo mediante Power Query y dejar de lado las fórmulas de excel. ¡Muchas gracias!

    ResponderEliminar
  2. Hola! tal vez puedas ayudarme a generar una función, sé que la duda excede al post, pero tiene relación. Te comento mi duda.

    Quisiera obtener el máximo de una columna numérica, pero antes filtrar la tabla según una condición lógica AND (List.AllTrue).

    Mi función ha quedado algo así:
    (Tabla as table,Column1 as text, Value1 as text, Column2 as text, Value2 as text, ColumnNumeric as text)=>
    let
    maxValor = List.Max(
    Table.Column(
    Table.SelectRows(Tabla, each
    List.AllTrue({[Column1]=Value1,[Column2]=Value2}
    )
    )
    ,"ColumnNumeric"
    )
    )
    in
    maxValor



    Pero me da un error, no reconoce "Column1" y "Column2". Si pongo el nombre de la columna hardcodeado, si funciona.

    Espero que puedas ayudarme.

    Muchas gracias desde ya!

    Saludos.

    ResponderEliminar
    Respuestas
    1. Hola
      tendría que verlo en el contexto del fichero...
      pero parece que la columna numérica estás empleándola como literal (entrecomillada), "ColumnNumeric" y salvo que se llame así te fallará...
      las otras dos columnas, a priori las estás incluyendo como parámetros y tendrás que informar de cuáles son los nombres...

      Pero te repito que sin el contexto de fichero no sabría decirte..

      Saludos

      Eliminar