Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
Anonymous
Not applicable

Como fazer o QlikView escolher a Coordenada mais precisa?

Olá pessoal...

     Estou com um problema que tem tirado o sono. É o seguinte:

     Trabalho numa empresa em que alguns colaboradores coletam as coordenadas dos pontos visitados uma vês por mês, ou pelo menos deveria ser assim. Só que percebemos que algumas coordenadas estão muito divergentes, tipo, quando ploto todas as coordenadas coletadas até o momento no mapa vejo que uma, ou mais, ficam distantes da maioria; isso é um indício que o colaborador não coletou a coordenada onde deveria. Agora preciso criar um banco de dados com apenas uma coordenada por cliente, só que nem todas condizem com a realidade. Estou tentando desenvolver um algorítimo para fazer com que o QlikView escolha a coordenada que, provavelmente, é a mais correta para cada cliente. E isso está me tirando o sono.

     Não posso fazer isso manualmente porque temos mais de cem mil clientes, o que torna o trabalho de escolha manual praticamente impossível.

     Desde já muito obrigado pela atenção.

1 Solution

Accepted Solutions
Anonymous
Not applicable
Author

     Finalmente encontrei uma solução! É tão do simples que me dá até vergonha!

     Conversando com um amigo ele citou a "palavra mágica" que solucionou todos os meus problemas...


     Em estatística existe uma função que escolhe o valor localizado no meio de uma lista. Essa função se chama "MEDIANA"; e era exatamente o que estava precisando, mas não sabia de sua existência.


     A Solução num script ficou da seguinte forma:


UC_Coord_Mediana:
Load UC,
      Median(Latitude) As Latitude, /* A função estatística correspondente no QlikView: "Median" */
     
Median(Longitude) As Longitude
Resident UC_Coord_Sinal
Group By UC;
Store UC_Coord_Mediana Into UC_Coordenadas_Validas.qvd (qvd);
Drop table UC_Coord_Mediana;

     Se a lista contiver uma quantidade par de números o função "Median" retornará a média aritmética dos dois números centrais da lista.


Obrigado pelo interesse Aderlan!

View solution in original post

3 Replies
aderlanrm
Partner - Specialist
Partner - Specialist

Olá Wellington, tudo bem?

Já resolveu isso? Não vi esse post antes, achei ele por acaso agora.

Se ainda não resolveu, poderia anexar um QVW de exemplo para avaliarmos?

Qual seria o critério de proximidade, ou seja, qual regra determina o ponto mais próximo do real?

     A data de cadastro?

     A médias das distâncias?

     A coordenada mais próxima da coordenada do endereço do cliente?

     Todas as alternativas... Rsrsrrsrs...

Abraço.

Aderlan Rodrigues
Analista, Arquiteto de Dados e Piloto Amador Drone FPV
 (41) 9 9917-0869  www.BIdeAZ.com.br  Youtube.com/bideaz  Instagram.com/bideaz.in

"Nada é tão inútil quanto fazer eficientemente o que não deveria ser feito." (Peter Drucker)
Anonymous
Not applicable
Author

​ Boa tarde Aderlan,

Tudo bem?

Eu resolvi em parte, pois usei uma tremenda "gambiarra" para escolher

apenas uma coordenada por UC (Unidade Consumidora)​. Não tenho como lhe

enviar um QVW porque ele tem mais de 100MB mas vou te enviar alguns prints,

enquanto tento explicar melhor:

Primeira Situação:

Observe que os pontos estão muito próximos. Em casos como esse não há

problema algum. Podemos escolher qualquer um que a coordenada pode ser

considerada válida.

Segunda situação:

Terceira:

Quarta:

Observe que nas três ultimas imagens temos uma coordenada que está

distante das outras, temos casos de ter até mais de uma distante do ponto

que pode ser considerado como "real".

Fazer essa escolha visualizando num mapa é fácil. Mas temos mais de um

milhão de Unidades Consumidoras, com coordenadas sendo coletadas quase

todos os meses. Minha dificuldade está em criar um algoritmo que possa

fazer essa escolha de modo automático e confiável.

A "gambiarra" que fiz foi aplicar a função de MODA para escolher uma

coordenada que se repete mais. As que não puderam ser escolhidas dessa

forma e fiz uma contagem de quantas coordenadas tinha, para cada UC, dividi

por 2 e usei uma função "Max" usando o resultado da divisão por 2 para

escolha da ordem. Mas tudo isso com etapas de tratamento manual, demandando

um tempo que poderia ser aproveitado em outras coisas.

Vou te mostrar o texto do script (incluindo as tentativas que fiz e ainda

não apaguei):

SET ThousandSep='.';

SET DecimalSep=',';

SET MoneyThousandSep='.';

SET MoneyDecimalSep=',';

SET MoneyFormat='R$ #.##0,00;-R$ #.##0,00';

SET TimeFormat='hh:mm:ss';

SET DateFormat='DD/MM/YYYY';

SET TimestampFormat='DD/MM/YYYY hh:mm:ss[.fff]';

SET MonthNames='jan;fev;mar;abr;mai;jun;jul;ago;set;out;nov;dez';

SET DayNames='seg;ter;qua;qui;sex;sáb;dom';

Directory;

LOAD UC,

MES_ANO_FATMTO,

Latitude,

Longitude

FROM

UC_Coordenadas_Geral.qvd

(qvd);

/*

UC_Coordenadas_Validas:

Load UC,

Max(Latitude,$(=Ceil(Count(Latitude)/2,1))) As Latitude_Valida,

Min(Longitude,$(=Ceil(Count(Longitude)/2,1))) As Longitude_Valida

Resident UC_Coordenadas_Geral;

*/

UC_Qtd:

Load Distinct UC,

Div(Count(Latitude),2)+1 As Lat_Qtd,

Div(Count(Longitude),2)+1 As Lon_Qtd

Resident UC_Coordenadas_Geral

Group By UC;

/*

Qtd_Coord:

Load Max(Lat_Qtd) As Max_Lat

// Max(Lon_Qtd) As Max_Lon

Resident UC_Qtd;

*/

/*Let Ord = 6;

Do While Ord>0

Load UC,

Max(Latitude,$(Ord)) As Lat_Val,

Max(Longitude,$(Ord)) As Lon_Val

Resident UC_Coordenadas_Geral

Where Not Exists(UC)

Group By UC;

Let Ord=Ord-1;

Loop;

*/

/*

Coordenadas_Validas:

Load UC,

Max(Latitude,6) As Lat_Val,

Max(Longitude,6) As Lon_Val

Resident UC_Coordenadas_Geral

Where Not Exists(UC)

Group By UC;

*/

A fórmula usada para escolha da coordenada, usada na tabela

"Coordenadas_Validas":

"If(Mode(Latitude)<0,Mode(Latitude),Max (Latitude,$(Ord)))"

E por último a tela do aplicativo:

Por enquanto eu parei de esquentar a cabeça com isso mas logo logo

tenho que voltar a esse problema porque preciso dessas informações

atualizadas.

Espero que você possa me ajudar.

Desde já muito obrigado pela atenção.

Felicidades...

Wellington Regis

Em 12 de novembro de 2014 16:01, Aderlan Rodrigues <qcwebmaster@qlikview.com

escreveu:

Qlik Community <http://community.qlik.com/> Como fazer o QlikView

escolher a Coordenada mais precisa?

reply from Aderlan Rodrigues

<http://community.qlik.com/people/aderlanrm?et=watches.email.thread> in *Education

Services * - View the full discussion

<http://community.qlik.com/message/655239?et=watches.email.thread#655239>

Anonymous
Not applicable
Author

     Finalmente encontrei uma solução! É tão do simples que me dá até vergonha!

     Conversando com um amigo ele citou a "palavra mágica" que solucionou todos os meus problemas...


     Em estatística existe uma função que escolhe o valor localizado no meio de uma lista. Essa função se chama "MEDIANA"; e era exatamente o que estava precisando, mas não sabia de sua existência.


     A Solução num script ficou da seguinte forma:


UC_Coord_Mediana:
Load UC,
      Median(Latitude) As Latitude, /* A função estatística correspondente no QlikView: "Median" */
     
Median(Longitude) As Longitude
Resident UC_Coord_Sinal
Group By UC;
Store UC_Coord_Mediana Into UC_Coordenadas_Validas.qvd (qvd);
Drop table UC_Coord_Mediana;

     Se a lista contiver uma quantidade par de números o função "Median" retornará a média aritmética dos dois números centrais da lista.


Obrigado pelo interesse Aderlan!