3 Replies Latest reply: Feb 6, 2015 1:12 PM by Wellington Regis Silva RSS

    Como fazer o QlikView escolher a Coordenada mais precisa?

    Wellington Regis Silva

      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.

        • Re: Como fazer o QlikView escolher a Coordenada mais precisa?
          Aderlan Rodrigues

          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.

            • Re: Como fazer o QlikView escolher a Coordenada mais precisa?
              Wellington Regis Silva

                  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>

               

            • Re: Como fazer o QlikView escolher a Coordenada mais precisa?
              Wellington Regis Silva

                   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!