Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola tengo una tabla de esta forma:
PEDIDO PRODUCTO TONO €
1 A Azul 10
1 B 10
2 C Verde 20
Quiero sacar los pedidos cpmpletos que tengan algún valor en Tono vacío, por ejemplo mediante un botón que ponga pedidos no fabricados... Lo estaba haciendo con un campo dentro de la tabla que IF(tono='', 'NO FABRICADO', 'FABRICADO') pero eso me pone el valor en cada linea y yo quiero que si hay alguna linea en el pedido que no tenga tono entonces el pedido entero es NO FABRICADO
=If(Aggr(NoDistinct Min({1} Len(Trim([TONO]))), [PEDIDO]), 'FABRICADO', 'NO FABRICADO')
La función Aggr me permite generar una tabla virtual con la expresión Min({1} Len(Trim([TONO]))) agrupada por el campo [PEDIDO].
Len(Trim([TONO])) devuelve la cantidad de caracteres por cada valor del campo [TONO]. Para null y cadena vacía el resultado será cero.
De acuerdo a esto, la función Min devolverá cero para todos los [PEDIDOs] que tengan al menos un registro con valor null o cadena vacía en el campo [TONO]. Para los [PEDIDOs] que no cumplan con esto, Min devolverá un valor distinto de cero.
Luego, la función If recibe como condición lógica los valores devueltos por la función Min (en combinación con Aggr) que incluyen ceros (valor si falso) y números distintos de cero (valor si verdadero).
Cabe señalar que el identificador de conjunto {1} de la función Min se añade para evitar que las selecciones del usuario afecten la clasificación de los pedidos.
Buenas, podrías cargar los pedidos incompletos en un tabla mapping y aplicar la tabla al cargar los pedidos:
mapPedidoIncompleto:
Mapping LOAD PEDIDO, 1 as esPedidoIncompleto
From/Resident ...
Where Len(Trim(TONO))=0;
Pedidos:
LOAD ...,
ApplyMap('mapPedidoIncompleto', PEDIDO, 0) as esPedidoIncompleto
From/Resident...;
O cargar los pedidos incompletos en un campo para comprobar con exists:
chkPedidoIncompleto:
LOAD Distinct PEDIDO as chkPedidoIncompleto
From/Resident ...
Where Len(Trim(TONO))=0;
Pedidos:
LOAD ...,
If(Exists('chkPedidoIncompleto', PEDIDO), 1, 0) as esPedidoIncompleto
From/Resident...;
DROP Table chkPedidoIncompleto;
Saludos.
Pero sin tocar el script directamente en el gráfico no se puede hacer con alguna funcion como EXISTS?
=If(Aggr(NoDistinct Min({1} Len(Trim([TONO]))), [PEDIDO]), 'FABRICADO', 'NO FABRICADO')
No, exists es solo una función de script y mapping también. Lo recomendable sería tenerlos marcados en el script.
También hay que tener en cuenta si el valor es un valor nulo o un valor vacío, que son cosas distintas. ¿De qué clase de valor estamos hablando? ¿Puedes subir un ejemplo aunque sea con datos creados manualmente para ver el caso concreto?
El valor es nulo por eso pongo ' '
Eso sería un valor vacío, no un valor nulo, es decir, el campo tiene valor, pero es un valor vacío, nulo sería ni no tuviese absolutamente nada.
De todas formas la expresión de JGMDataAnalysis te puede servir en ambos casos.
que significa (Aggr(NoDistinct Min({1} Len(Trim([TONO])))????
La función Aggr me permite generar una tabla virtual con la expresión Min({1} Len(Trim([TONO]))) agrupada por el campo [PEDIDO].
Len(Trim([TONO])) devuelve la cantidad de caracteres por cada valor del campo [TONO]. Para null y cadena vacía el resultado será cero.
De acuerdo a esto, la función Min devolverá cero para todos los [PEDIDOs] que tengan al menos un registro con valor null o cadena vacía en el campo [TONO]. Para los [PEDIDOs] que no cumplan con esto, Min devolverá un valor distinto de cero.
Luego, la función If recibe como condición lógica los valores devueltos por la función Min (en combinación con Aggr) que incluyen ceros (valor si falso) y números distintos de cero (valor si verdadero).
Cabe señalar que el identificador de conjunto {1} de la función Min se añade para evitar que las selecciones del usuario afecten la clasificación de los pedidos.