Problema de munca

Mi s-a cerut sa fac o chestie, va explic mai jos. Pe care n-o s-o fac ca “nu e timp” si ca e aiurea sa ma plateasca si pe mine si pe un coleg pentru cat ar dura s-o fac. ROI mic. Daca nu cumva se poate mai usor si nu stiu eu.

Eu lucrez acum (si) cu un modul  din SAP care se numeste Master Data Governance.  Care e foarte misto dar un pic under-developed pentru deceniul asta. Ceea ce e si mai misto, ca asa castig eu bani multi.

Introducere, pentru aia care s-au pierdut din momentul in care am scris SAP, companiile au nevoie de calitatea datelor din sistemele lor.  Secolul ( sau poate doar deceniul) asta este  despre date si calitatea datelor. Ca sa poti sa faci analize si proiectii competente.

Datele tranzactionale generate automatizat de sisteme sunt ok. Robotii nu-s prosti si handicapati ca noi.

Celelalte generate de “mana omului” sunt ca …penis.

Imaginati-va companii in care oamenii introduc date despre materiale, despre clienti. Despre.   De capul lor.  Asa te trezesti cu 17000 de adrese fara zipcode, in conditiile in care in mai multe aplicatii , unele legale,  codul asta postal e obligatoriu. Si vrei sa muti datele astea dintr-un sistem unde n-ai niciun fel de reguli intr-unul “compliant” ( sunt Raducioiu, nu stiu cuvantul potrivit) cu standardele. Si nu merge.

Asa ca companiile  au evoluat de la Master Data Management la Master Data Governance. Adica baga  un apasaci datele alea “in calculator”, dar nu devin active si folosite in toata compania imediat. Nu, ca poate a introdus cacaturi. Intra intr-un proces de aprobare, isi mai dau si altii cu parerea, mai experti decat el si daca e ok, intra in sistem.  Despre procesul asta de aprobare e vorba in “Governance” si din asta sug bani.

Ajunge cu introducerea.

In MDG ai  modele de date. Va arat acum unu “standard” dezvoltat deja de SAP, pentru Business Partner ( clienti si furnizori ). Din motive de discretie si contract nu va pot arata fix ce lucrez, adica un model custom.

Entity types alea sunt un concept complex, pe care nu am sa-l dezvolt, dar ganditi-va la ele ca la niste structuri de date. Ca sunt linii, ca sunt doar un camp,  nu conteaza – structuri, nu intram in detalii.

Cand introduci date, mii si zeci de mii de intrari si cand sunt mai multi care fac asta, ar trebui sa te asiguri ca nu introduci duplicate. Si ar trebui sa rulezi ceva queries, sau sa cauti prin datele introduse cumva ca sa te asiguri ca nu a introdus deja cineva clientul ala, in cazul de sus. Doar ca nu asa functioneaza angajatii. Pe angajati ii doare in pula. Nici un select nu stiu sa scrie, nici un excel n-ar deschide. Consuma timp.  Motiv pentru care tre’ sa faci un proces automat care verifica el si le arata la prosti pe ecran, ba, eu cred ca esti pe cale ssa introduci un duplicat, ia da o geana  ici ( sub ici , pui un link unde da omu’ tau click si ii aduce potentialul duplicat). Si ala vede mai departe ce face.

Sapu’ s-a gandit si la asta,  si are ceva “built in”, ca sa nu stai sa scrii cod gramada, ca handicapatu'( asa li se spunea in Romania la programatori, pe vremea cand nu plateau impozit pe venit) .

Si clicka-clicka, iti faci o aplicatie de cautare, cu un profil pe care il configurezi cam ca mai jos.

Ai niste campuri , un mod de cautare, vezi aici HA, de la Hanna, care stie cu fuzzy search si alte manele .

Gen  distanta dintre cuvinte (Damerau – Levenshtein) pe care am implementat-o si eu manual acum vreo 5 ani si care era un chin pentru baza de date.  Not anymore.

Mai vedeti acolo ceva pondere in relevanta penru stabilirea candidatului la a fi duplicat si ordinea de cautare.

Boon.  Asta a fost introducerea de fapt.

Vedeti acolo LATITUDE SI LONGITUDE.  S-a cerut sa verific daca o locatie e duplicat.  In afara de nume, astea-s doua coordonate utile in stabilirea acestui fapt. Ar mai fi tara si oras, dar sa nu ne pierdem in detalii.

Si-am zis simplu: Faci exact match pe geolocatie si daca e match, hai cu duplicatul. Acolo nu-i chiar exact match ca e exact match pe fiecare coordonata, ceea ce nu-i corect. Deloc. Da-n fine pot sa concatenez campurile alea intr-unu, iar apoi am exact match pe locatie.

Clientul vine si zice ca nu e asa, ca vrea fuzzy match, fie, merge si aia. dar vrea o toleranta cu raza de 5km .

Suna simplu, si eu as pune conditii d-astea daca as fi client. Dar.

Coordonatele  geografice standard de GPS sunt in radiani ( nu au  subunitatile de grad in minute si secunde – care-i o porcarie, intre noi fie vorba) ci in  fractiune de grad (decimals), dar tot aia e.

Problema cu Pamantul  e doua. Una e ca e rotund ( azi mi-as dori sa fie plat,  unde-s aia cu Societatea Pamantului Plat sa fac un lobby cu ei ca sa fie plat) , a doua e ca  nici chiar asa de rotund nu e.

Pe a doua o trecem la toleranta si ramanem cu prima.

Si daca e rotund ai sistemul asta de impartire de sfera.

Linii paralele pe latitudine si nu asa de paralele pe longitudine.

Ceea ce inseamna  ca latitudinea se poate transforma in mod direct in km – vreo 110 mii si ceva pe grad,  dar longitudinea nu.  Ca daca esti la polul  geografic ai toate gradele intr-un milimetru (punct).

Desigur ca exista transformare matematica pentru a calcula  longitudinea in km de la un punct de referinta, si nu-i chiar complicata. Long. Km =  Cosinus ( Lat. Rad. ) x  Lungimea unui grad de longitudine la ecuator  – adica unde latitudinea e 0.

La prima vedere nu-i greu. La a doua vedere trebuie sa mai fac 2 campuri  cu  Latitudine si Longitudine in KM. Sa le calculez la introducere pentru fiecare locatie.  Si sa le normez  tot la 5km. Adica  deplasarea pe linia ecuatorului ,  din punctul de longitudine 0, va avea valoarea , nu 5, ci 1.

Si sa le compar pe alea – DAAAR, tot nu e ok, ca o raza de 5km in jurul unui punct nu are  multe de aface cu fuzzines si cu  Damerau – Levenshtein. E alta matematica.

Eu obtin o granularite exprimata in spatii patrate, ca patratul negru de mai jos. Ei vor o continuitate determinata de raza unui cerc.

 

Eh, nu pot sa construiesc o transformare matematica prin care sa mapez o proiectie plana in cercuri. Ca fie se suprapun fie am zone de “umbra”. Daca nu intelegeti ce spun ar cam fi fost momentul sa inchideti pagina acum 20 de randuri.

Pot sa rezolv problema cu o matrice de distante, intre fiecare si fiecare locatie. Sau la momentul la care se calculeaza duplicatele sa scriu eu  propria functie care  verifica coordonatele introduse  versus toate celelalte , sau versus toate intr-un range, ca nu suntem idioti. Dar asta nu mai e clicka-clicka, stiu s-o fac, dar pe urma tre’ sa integrez cu standardul de clicka-clicka si aci nu mai e usor si prin urmare nu merita sa platesti niste  mii de euro ( vorbesc de client) pentru diferenta de precizie.

Nu, nu va cer sfatu’, doar ma laud si va intreb daca jobul vostru’ e la fel de mishteaux.

Asta ca sa aveti ce face pana la down time, ca eu sigur am.

 

 

 

 

0 0 votes
Article Rating
Subscribe
Notify of
guest
16 Comments
Inline Feedbacks
View all comments
Pantera Roz
Pantera Roz
6 years ago

Vezi ca cei de la ESRI au un modul pentru SAP care face chiar chestii din astea. Integreaza functionalitati de GIS in SAP. In alta ordine de idei, exista sdk-uri pe net (JS, .NET) care implementeza exact asemenea functii de geolocatie si de comparare coordante geo. Unele sunt open source. Tu primesti la input coord GPS in format WGS84 (proiectie Mercator sau WebMercator cel mai probabil). Daca nu ma inseala memoria (sunt cativa ani de cand nu am mai facut din astea), ar trebui sa transformi in sexazecimal (grade minute secunde). Ai putea sa te uiti la secunde si sa… Read more »

Pantera Roz
Pantera Roz
6 years ago

O alta solutie este sa folosesti Google Maps API, in mod free (pana la 5000 interogari pe zi, parca) si faci apel de web service catre Google cu valorile X si Y si iti intoarce distanta de diferenta

Pantera Roz
Pantera Roz
6 years ago

Ref Google Api sau altele,putem continua pe mail, daca doresti

Blegoo
Blegoo
6 years ago

Nefiind de specialitate, am întrebat în altă parte și mi s-a zis:

“Gata, am citit, dar tot n-am inteles care e marea dilema. Cel mai simplu ar fi sa foloseasca cele doua coordonate ortogonale pe sfera (unghiurile Euler), sa calculeze separat cele doua distante corespunzatoare diferentei in latitudine si longitudine, iar apoi s-o aleaga pe cea mai mare dintre ele. In felul asta, cercul devine patrat. Probabil ca stie si el asta, dar a rescrie o harta folosind o metrica diferita de cea local euclidiana cere efort si bani mai multi.”

Catalinx
Catalinx
Reply to  Blegoo
6 years ago

Am zis mai sus . Nu calculul distanței e marea problemă. Poate pentru cineva din afara SAP asta pare provocarea, dar nu.
Faptul că am o funcție blackbox care calculează duplicate pe bază de diferența liniară a valorilor din câmpuri . Și că indiferent dacă ești pe o sferă / cub , când faci proiecția în plan – variația coordonatelor de poziție te înscrie într-un patrat , iar distanta e un cerc descris de o rază dintr-un punct descris de coordonatele de poziție și că ( vezi mai jos ) …

PanteraRoz
PanteraRoz
6 years ago

Daca specs cere sa prelucrezi 10000 inregistrari in max 0.1 secunde, atunci nu e treaba de apelat api-uri externe, clar.
Folosesc in mod curent atat google cloud cat si esri si aws (conturi platite, enterprise) si nu se incadreaza in cerintele astea.

P.s. Conturile enterprise nu au profiling-ul de care vorbeai. Da, pe tarlaua mea cloud-ul e in standard.

Catalinx
Catalinx
Reply to  PanteraRoz
6 years ago

(->urmare la și că ) … Am fost optimist. La 10k queries + calcul de distante și de transformare de coordonate durează 0.25 secunde de secunde. În producție probabil merge mai repede că e sistemul mai bun. Dacă fac un singur query și iau toate locațiile și calculez distanțele dintre ele mă aștept să fie sub 0.1 secunde, dar agregat cu căutarea de duplicate executată de SAP pentru celelalte câmpuri va fi pe la minim 0.2 secunde Estimez 0.25. Așa că. Ar trebui să fac ceva profiling pe coordonate. Gen să îmi aleg ceva Range în funcție de coordonatele de… Read more »

Stropic
Stropic
6 years ago

foarte interesant. imi dau seama ca daca cere clientul, cere, dar altfel, nu e cel mai safe sa se caute pe baza codului unic de furnizor, gen cui, siret, etc? ca si daca are fix aceeasi adresa, si se schimba ca persoana juridica, teoretic ar trebui un nou cont, nu? cred ca practic nu prea face nimeni asta, dar totusi…

eu sunt curioasa sincer ce se intampla de la “Si ala vede mai departe ce face.”, daca il lasa sa treaca mai departe si cu duplicatul gasit. :))

Stropic
Stropic
Reply to  Catalinx
6 years ago

Oare nu e complicat cu facturarea dupa? Probabil adresa de facturare ramane aceeasi.

As paria pe a doua varianta (sorry) :)) Nu de alta, dar daca voiau sa ii lase sa isi faca de cap nu te mai aduceau, iar sa le respinga ceva nu le convine ca si concept cred