Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Hola,
He buscado bibliografía y discusiones de cómo aplicar la función Exists, pero no me ha funcionado y no he podido detectar cuál es mi error. Tengo una base de datos donde dependiendo de lo contenido en una dimensión se ejecuta una acción, por ejemplo:
Si la dimensión Pais contiene países como Afganistan, Cuba, USA, entonces que ponga la palabra "Aprobado", sino, entonces que ponga la palabra "Pendiente".
¿Me podrían colaborar por favor? Gracias!
Hola,
Realmente lo que hice fue una mezcla entre lo comentado por Joaquín, Juan y Alex y me dio el resultado. Muchas gracias!
Hola Monica,
Puedes subir el código que estás usando para identificar si se encuentra ahí el error
y en lo posible un ejemplo de los datos en los cuales trabajas
Saludos
MB
Hola Monica, no se si entendi bien pero su es lo que creo, la funcion exist no te sera de ayuda.
PAra hacer lo que necesitas, es cuestion de comprar el campo Pais con los paises que quieres que contenga. Por ejemplo:
MiTabla:
Load
if(match(Pais, 'US,'Afganistan', 'Cuba') > 0, 'Aprobado', 'Pendiente') AS CategoriaPais
FROM miArchivo.qvd (qvd);
Tambien puedes usar un Mapping Load. Esta funcion esta optimizada mejor cuando necesitas mapear muchos valores.
Por otro lado, la funcion "exists()" es utilizada para cargar solo valores de una tabla que ya han sido cargados previamente en otra tabla.
Ej:
a:
Load Client FROM miArchivo.qvd (qvd);
b:
Load Client, Venta FROM MiArchivo2.qvd (qvd)
WHERE EXISTS(Client);
En este caso, la tabla b, solo cagara las venta de clientes que se hayan cargado previamente en la tabla a.
Saludos
Juan
Hola, esto es lo que estoy haciendo:
PrefijoPais.cvs = Listado donde están todos los países del mundo con el número del prefijo y el número de caracteres después del prefijo que se requiere trabajar
Pais,CaracteresPrefijo,CaracteresConsecutivo
Afganistan,2,3
Africa,2,3
Algeria,3,3
...
Jamaica,4,3
Kenya,3,3
...
Venezuela,2,3
Zimbawe,3,6
Map_Prefijos:
Mapping
LOAD Pais,
CaracteresPrefijo
FROM
PrefijoPais.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
//Trae el número de caracteres después del prefijo
Map_Prefijos_1:
Mapping
LOAD PaisDestino,
CaracteresConsecutivo
FROM
PrefijoPais.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Trafico_Tmp:
LOAD Distinct
Lote,
Pais,
NumeroDestino,
left(NumeroDestino,ApplyMap('Map_Prefijos',Pais) ) as Prefijo,
ApplyMap('Map_Prefijos',Pais) as Prefijo_Num,
mid(NumeroDestino,
ApplyMap('Map_Prefijos',Pais) + 1, ApplyMap('Map_Prefijos_1',Pais)) as Caracter,
Year(Fecha) as Año
FROM
[..\..\..\Produccion\DataMining\Mineria\Qvd\Trafico_*_tra.qvd]
(qvd)
Where Year(Fecha) = '2016';
Trafico_Tmp_0:
LOAD Distinct
Lote,
Prefijo,
'('&Concat(Distinct Caracter,'|',Caracter)&').*,Adicionar' as Exp_Reg_1
Resident Trafico_Tmp
Group by
Lote,
Prefijo;
DROP Table Trafico_Tmp;
Trafico:
NoConcatenate
LOAD Distinct
subfield(Lote,'-',1)&';'&subfield(Lote,'-',2)&';'&subfield(Lote,'-',3)&',^'&Prefijo&'.*'&Concat(Distinct Exp_Reg_1,'|') as Exp_Reg
Resident Trafico_Tmp_0
Group by
Lote,
Prefijo;
DROP Table Trafico_Tmp_0;
Lo anterior lo aplicará para todos los países, pero requiero que para 5 países específicos no tome esta sentencia en "Trafico_Temp_0":
'('&Concat(Distinct Caracter,'|',Caracter)&').*,Adicionar' as Exp_Reg_1
sino ésta:
', Adicionar' as Exp_Reg_1
Y además, que en "Trafico" para esos 5 países específicos la concatenación sea:
subfield(Lote,'-',1)&';'&subfield(Lote,'-',2)&';'&subfield(Lote,'-',3)&',^'&Prefijo&'.*'&Exp_Reg_1) as Exp_Reg
Para el resto de países sea:
subfield(Lote,'-',1)&';'&subfield(Lote,'-',2)&';'&subfield(Lote,'-',3)&',^'&Prefijo&'.*'&Concat(Distinct Exp_Reg_1,'|') as Exp_Reg
Mil gracias!
Hola,
tal y como te apuntaba Juan, yo también sugeriría utilizar la función match.
Por ejemplo en "Trafico_Temp_0":
If(
Match(Pais, 'US,'Afganistan', 'Cuba') > 0,
', Adicionar',
'('&Concat(Distinct Caracter,'|',Caracter)&').*,Adicionar'
) as Exp_Reg_1
Recuerda:
Ten en cuenta que necesitas el campo Pais en la tabla origen de los datos si quieres evaluar el dato al cargarlo.
Por ejemplo, si quieres evaluar por país el campo Exp_Reg en la tabla Trafico, y los datos los cargas de la tabla Trafico_Tmp_0, tendrás que dejar el campo Pais en esa tabla, o crearte un flag para identificar los registros correspondientes a esos paises.
Un saludo
Hola Mónica:
Otra posiblidad es
Acciones:
Mapping
LOAD * INLINE [
País, Acción
Afganistán, Aprobado
Cuba, Aprobado
...
];
Trafico:
LOAD ...
ApplyMap('Acciones', Pais, 'Pendiente') as Acción
La tabla de mapeo la puedes cargar Inline o desde un origen externo, como te sea más práctico.
Saludos
Joaquín
Hola,
Realmente lo que hice fue una mezcla entre lo comentado por Joaquín, Juan y Alex y me dio el resultado. Muchas gracias!
Perfecto.
Mónica, marca tu respuesta como correcta para cerrar el hilo.
Saludos
Joaquín
Hola Joaquín, no me sale la opción de "Respuesta Correcta"
Hola Mónica:
Tendrías que ver algo parecido a esto
Esto es un recorte de una conversación no cerrada
Saludos
Joaquñin