Datensuche nach PLZ - aus vier verschiedenen Tabellen :: Umgebungssuche auf 4 Datensätzen aus ganz D.

tarifa

Lieutenant
Registriert
März 2020
Beiträge
549
hallo liebe Community - guten Abend,


ich habe eine Aufgabe, die ich mit Calc / oder Excel loesen will:
ich hab mal ein Bespiel hergestellt wie die Aufgabe mit der Umgebungssuche aussieht die ich mir vorstelle: ich habe vier datasets:

dataset 1; dataset 2; dataset 3; dataset 4


Code:
dataset-1

+-----------+-------+------------+-------+--------+------------------+----+------------+-------+--------------+

|     id    | @type |    name    | plz   | city   |    addr:street   | hn |addr:email  |etc/etx| special-data |

+-----------+-------+--------------------+---------------------------+----+------------+-------+--------------+

| 268915924 | node  | clinic   1 | 12055 | Berlin | Zwiestädter Str. | 23 |=ZÄHLENWENN |       |              |

| 268915972 | node  | clinic   2 | 80004 | München| Hedwigstraße     | 53 |=ZÄHLENWENN |etc/etx| special-data |

| 268916030 | node  | clinic   3 | 70545 | Stgt   | Donaustraße      | 48 |=ZÄHLENWENN |       |              |

| 268916196 | node  | clinic   4 | 20222 | Hamburg| Winsstraße       | 31 |            |       |              |

+-----------+-------+------------+-------+--------+------------------+----+------------+-------+--------------+

das sind dann also vier Datensätze die je circa 500 bis 700 Datensätze (Einträge oder wir könnnen auch Zeilen sagen) beinhalten. Alle Datensätze - von 1 bis 4 eint die Tatsache dass es Daten sind aus Deutschland - dass alle Postleitzahlen haben.

Es sind Datasets mit folgenden Daten

dataset_1 _ Kliniken
dataset_2_ Bäckereien
dataset_3_ Milchläden
dataset_4_ Schuhläden

alle diese vier Datasets sind in einer vier verschiedenenen ExcelTabellen drinne. Nun ist das Ziel folgendes: ich will eine Suchfunktion haben die mir folgenes leistet: wenn ich die Postleitzahl 8000 eintippe dann will ich in der Umgebung alle Fundstellen zu allen vier Tabellen (oder Datasets) haben:


.... also die

dataset_1 _ Kliniken
dataset_2_ Bäckereien
dataset_3_ Milchläden
dataset_4_ Schuhläden

hmm - ist das clever - ich mein ich koennte ggf. die Daten auch schon vorab alle in eine große Tabelle reinwerfen - dann ist das gemixt also dann hab ich einen Mix aus Kliniken und Bäckereien und Milchläden und Schuhläden.. - wollte das aber am Anfang noch in vier verschl. Tabellen halten...

M.a.W. der Erhalt der einzelnen Tabellen ist insgesamt dann doch ein Anliegen. Ansonsten


Was meint ihr denn - kann man das so angehen!?



Freue mich auf einen Tipp
 

Anhänge

  • data_retrieval__1.jpg
    data_retrieval__1.jpg
    53,4 KB · Aufrufe: 240
Zuletzt bearbeitet:
Was spricht denn für einzelne Tabellen? Wenn die Unterscheidung lediglich die Kategorisierung ist könntest Du ja auch einfach mit Filter und dergleichen arbeiten.
 
Entweder wie mein Vorredner schon sagte in eine Tabelle packen oder über mehrere Konsolidierungsbereiche zu einer Pivottabelle zusammenführen, dann kann man filtern. Am besten den PivotTable Assisenten benutzen (falls nicht sichtbar dann über Datei -> Optionen -> Menüband anpassen und irgendwo hinzufügen), und dann bei Schritt 1 mehrere Konsolidierungsbereiche auswählen. Die jeweiligen Spalten in allen Dateien hinzufügen und schon hast du die Pivot.

Mit einer Formel wird das zwar auch irgendwo möglich sein, ist aber sehr unschön. Die mehreren Arbeitsblätter wären da gar nicht das Problem, sondern eher dass du einen dynamischen Array zurückerhältst. Und das ist mit Excel nicht so schön zu lösen ^^
 
hallo oelepoteo und elnino460 - vielen dank für eure Beiträge. ;)


Was spricht denn für einzelne Tabellen? Wenn die Unterscheidung lediglich die Kategorisierung ist könntest Du ja auch einfach mit Filter und dergleichen arbeiten.

oelepoteo - ja das ist eine Idee. Eine große Tabelle wäre ja im Grunde auch eine Moeglichkeit: mit einer Spalte die den Typ der Daten indiziert -(siehe unten) (1=hospital, 2=bäckerei, 3=etc, 4= etx)

und eine zweite Tabelle die die typen und die Anzahl der Typen speichert.

danke elnino460 für deine Antwort.
Entweder wie mein Vorredner schon sagte in eine Tabelle packen oder über mehrere Konsolidierungsbereiche zu einer Pivottabelle zusammenführen, dann kann man filtern. Am besten den PivotTable Assisenten benutzen (falls nicht sichtbar dann über Datei -> Optionen -> Menüband anpassen und irgendwo hinzufügen), und dann bei Schritt 1 mehrere Konsolidierungsbereiche auswählen. Die jeweiligen Spalten in allen Dateien hinzufügen und schon hast du die Pivot.
Mit einer Formel wird das zwar auch irgendwo möglich sein, ist aber sehr unschön. Die mehreren Arbeitsblätter wären da gar nicht das Problem, sondern eher dass du einen dynamischen Array zurückerhältst. Und das ist mit Excel nicht so schön zu lösen ^^

...das mit den Pivot-Tabellen leuchtet ein: Es ginge ja theoretisch auch eine Suchfunktion über mehrere Tabellen-Blättern mit VBS Script in Excel doch dann aber dürfte die Datei dann vermutlich wieder nur mit Excel funktionieren.
man könnte auch eine Tabelle erstellen - und dann Filter für die Spalten - also eine Tabelle in der man noch die Kategorien

a. type
b. lon lat /(gps-daten eben) einfügt


dann kannst du in der gps-daten-spalte nach den Eingaben filtern. Ist ggf. halt am einfachsten und funktioniert dann auch in Calc - nicht nur in Excel, Excel-Online, Excel App, Google Tabellen und Apple Numbers.

also ich denke, dass dann die Tabelle ja so aussehen koennte:

Code:
vgl dies Angaben etwa:

@id            @type    @lon           @lat          name     addr:postcode                   addr:city    addr:street    addr:housenumber    contact:website     contact:email=*
35332685    hosp    -43.9485880    -19.8175998    Hospital Risoleta Tolentino Neves        Belo Horizonte    Rua das Gabirobas    1   
35332689    hosp    -43.9518360    -19.9178800    Prontocor                                Rio
53254282    hosp    -43.9319894    -19.9260406    Hospital Semper                          Rio
75600076    hosp    -43.9590472    -19.9505820    Hospital Luxemburgo                      Rio 
78719634    hosp    -43.9528392    -19.9239539    Hospital Vera Cruz                       Belo Horizonte    Avenida Barbacena    653

..[...]....

74400076    Backery   -43.9590472    -19.9455820    French Baguette                        Rio 
72219634    School    -43.9590472    -19.8885820    Paulo Freire-School Rio                Rio 

etc. etx.
by the way: Also es ist so: ich habe die Daten gewonnen über openstreetmap und gespeichert in einer Tabelle - kann dazu aber natürlich auch MySQL oder sqlite verwenden By the way: das soll für eine Webanwendung verwendet werden:

also: wenn man einen Punkt hat - also nehmen wir zum Beispiel den Berliner Aleanderplatz:

Code:
DD COORDINATES; 52.519664588 13.407998368
DMS COORDINATES; 52°31'10.79" N 13°24'28.79" E

die o.g. Daten die die Tabellen betreffen die könnte ich auch über die Overpass API jeweils direkt abfragen: https://wiki.openstreetmap.org/wiki/Overpass_API Vorerst dachte ich, ohne OSM Kartendarstellung zu arbeiten und lediglich eine Tabellarische Suche zu ermoeglichen. Die Abfrage via Overpass-Api liesse sich m.E. ja auch direkt im Webfrontent einrichten und umsetzen lassen.

also - sagen wir es sind die Tabellen wie folgt:

dataset_1_ Kliniken / hospital (hosp)
dataset_2_ Bäckereien
dataset_3_ Milchläden
dataset_4_ Schuhläden
dataset_5_ schulen

Vorerst jedoch will ich die Daten also lokal speichern (jeder Datensatz hat eine eindeutige ID) und nebenbei bemerkt auch noch den Timestamp mitführen, an dem der Datensatz zum letzten mal aktualisiert wurde.

zu der Umsetzung via Abfrage am OSM-Endpoint: hier kann man auch Overpass verwenden - für die Abfrage von POI; Da hierbei aufgrund der Unterschiede zwischen den POIs keine Homogenisierung möglich ist speichere ich
  • den POI mit seinen Koordinaten in einen Table (poiID, lat, lng).
  • Die Attribute speichere ich in einen extra Table (poiID, attr_name, attr_val).
damit habe ich die Daten relational abgebildet, kann sie aber nach Bedarf auch nonrelational abfragen und aus dem Backend als JSON ins Frontend übergeben. Ich kann auch die Attribut-Werte (attr_val) unabhängig vom Feldnamen durchsuchen. Mit den passenden Indizes funktioniert das performant und problemlos.
....also wenn ich 2 Datensätze habe....- hier zum Beispiel bezogen auf "Schulen"

einmal die Schule mit lon, lat

Code:
@id        @type    lon:, lat:
268915924    node,
name   max müller Schule

bzw - man kann das auch so umsezten - wenn man das nearby - thema komplett in einer OSM-Streetmap-Lsg. abbilden wollte.


Code:
[out:json][timeout:25];
nwr(around:10000,40.40,-79.93)["amenity"="hospital"];
out center;


wie oben aber beschrieben wollte ich zunächst mit Tabellen arbeiten - und eine tabellarische Lsg ergo zunächst mal ins Auge fassen..



oelepoteo und elnino460 - vielen dank nochmals für eure Beiträge. ;)


euch noch einen schoenen Sonntag

ps: nachtrag:

- mit OSM sind viele dieser Lösungen moeglich. Ich allerdings würde sehr gern mit den Tabellen arbeiten - also gewissermaßen mit den "Abzügen" die ich aus OSM Abfragen gewonnen habe und die lokal gespeichert sind...

also: wenn man einen Punkt hat - also nehmen wir zum Beispiel den Berliner Aleanderplatz:

Code:
DD COORDINATES; 52.519664588 13.407998368
DMS COORDINATES; 52°31'10.79" N 13°24'28.79" E

hier die diesbezügliche Abfrage:

Code:
[out:csv(::id,::type,::lon, ::lat, "name","addr:postcode","addr:city","addr:street","addr:housenumber","contact:website"," contact:email=*")][timeout:600];
nwr(around:10000,52.519664588 13.407998368)["amenity"="hospital"];
out center;

und hier der Datenstatz für die Resultate - in 10 km distanz rund um den Alex in Berlin - für Hospitäler..:

Code:
@id    @type    @lon    @lat    name    addr:postcode    addr:city    addr:street    addr:housenumber    contact:website     contact:email=*
775745348    node    13.3640559    52.5037269    Evangelische Elisabeth Klinik    10785    Berlin    Lützowstraße    24-26     
1257340412    node    13.3717015    52.4778100    Klinik für Kinder- und Jugendmedizin                     
4610129    way    13.3703633    52.5554121    Jüdisches Krankenhaus Berlin    13347    Berlin    Heinz-Galinski-Straße    1     
4637750    way    13.3752301    52.5573670    DRK Kliniken Berlin | Mitte                     
4750929    way    13.3428630    52.5421508    Charité Campus Virchow Klinikum                     
24054786    way    13.3967186    52.5260055    St. Hedwig-Krankenhaus    10115    Berlin    Große Hamburger Straße    5-11    http://www.alexianer-berlin-hedwigkliniken.de/st_hedwig_krankenhaus 
24931203    way    13.3713474    52.5356575    Bundeswehrkrankenhaus Berlin    10115    Berlin    Scharnhorststraße    13     
32424425    way    13.3465511    52.4620791    Auguste-Viktoria-Klinikum    12157    Berlin    Rubensstraße    125     
41447057    way    13.4297195    52.5406155    "Vivantes Klinikum im Friedrichshain, Standort Prenzlauer Berg"            Fröbelstraße    15     
46839073    way    13.4954295    52.5133024    Sana Klinikum Lichtenberg    10365    Berlin    Fanningerstraße    32    https://www.sana-kl.de/ 
48992251    way    13.3902674    52.4590154    Vivantes Wenckebach-Klinikum    12099    Berlin    Wenckebachstraße    23     
49876720    way    13.5095722    52.5280791    Evangelisches Krankenhaus Königin Elisabeth Herzberge    10365    Berlin    Herzbergstraße    79    https://www.keh-berlin.de/ 
53038853    way    13.2772940    52.5202588    DRK Kliniken Westend    14050    Berlin    Spandauer Damm    130     
93478285    way    13.2814545    52.4792516    Klinik am Roseneck                     
99146927    way    13.4141205    52.5709842    Maria Heimsuchung Caritas Klinikum Pankow                     
114201147    way    13.2897238    52.5222616    Schlosspark-Klinik    14059    Berlin    Heubnerweg    2    http://www.schlosspark-klinik.de 
119398219    way    13.3172076    52.4803471    Sankt Gertrauden-Krankenhaus    10713    Berlin    Paretzer Straße    12    http://www.sankt-gertrauden.de 
132056990    way    13.2918016    52.4904830    Martin-Luther-Krankenhaus    14193    Berlin    Caspar-Theyß-Straße    27-31    http://www.pgdiakonie.de/martin-luther-krankenhaus 
137033906    way    13.3637902    52.5545152    Evangelisches Geriatriezentrum Berlin    13347    Berlin    Reinickendorfer Straße    61     
138144499    way    13.4578379    52.4343190    Ida-Wolff-Krankenhaus    12351    Berlin    Juchaczweg    21     
138150297    way    13.4589236    52.4372389    Vivantes Klinikum - Neukölln    12351    Berlin    Rudower Straße    48     
168967363    way    13.3729563    52.4781040    St. Joseph Krankenhaus    12101    Berlin    Wüsthoffstraße    15     
229099728    way    13.3297666    52.4896219    Friedrich von Bodelschwingh-Klinik                     
305989452    way    13.4085942    52.4939881    Vivantes Klinikum am Urban    10967    Berlin    Dieffenbachstraße    1    http://www.vivantes.de/kau 
326445437    way    13.3283008    52.5830005    Krankenhaus des Maßregelvollzugs Berlin (KMV)    13403    Berlin    Olbendorfer Weg    70     
326448280    way    13.3274384    52.5812119    Vivantes Humboldt-Klinikum - Standort Oranienburger Straße    13437    Berlin    Oranienburger Straße    285     
378933899    way    13.4507369    52.5554951    Park Klinik Weißensee                     
391245035    way    13.3878055    52.5350773    Lazarus-Kranken- und Diakonissenhaus                     
567540939    way    13.4691308    52.5505504    Alexianer St. Joseph Krankenhaus Berlin-Weißensee                     
583306346    way    13.3778632    52.5257624    Charité Universitätsmedizin Berlin                     
700483283    way    13.4394766    52.5255323    Klinikum im Friedrichshain    10249    Berlin    Landsberger Allee    49    https://www.vivantes.de/fuer-sie-vor-ort/klinikum-im-friedrichshain-landsberger-allee/ 
7715945    relation    13.3452165    52.5060328    Franziskus-Krankenhaus Berlin    10787    Berlin    Budapester Straße    15-19    http://www.franziskus-berlin.de


wir sehen also;- mit OSM sind viele dieser Lösungen moeglich.
Ich allerdings würde sehr gern mit den Tabellen arbeiten - also gewissermaßen mit den "Abzügen",
die ich aus OSM Abfragen gewonnen habe und die lokal gespeichert sind...

man kann nämlich in den Tabellen auch schön browsen - und das hätte m.E. auch einige Vorzüge. Was meint ihr denn!?

vgl. z.b. eine demo: https://tablepress.org/demo/




nebenbei: eine Abfrage nach Distanzen - die ging ggf. auch mit Aloglia-API
Code:
2598851386    node    11.4735866    48.0912428    nursing_home    "Seniorenzentrum ""Marie-Anne Clauss"""        München    Luganoweg    8        https://www.asb-casa-vital.de/muenchen.html   
2685212812    node    11.5454459    48.0735744    kindergarten    Hänsel und Gretel    81545    München    Wunderhornstraße    7b           
2696585853    node    11.6572337    48.0789303    school    Musikschule Neubiberg                           
2960337347    node    11.6989158    48.1164575    kindergarten    Allegro Private Vorschule    81827    München    Dompfaffweg    10           
3345528112    node    11.7017383    48.1213520    kindergarten    Gemeindekindergarten Gronsdorf    85540    Haar    Sofienstraße    4           
3345528113    node    11.7156962    48.1081492    kindergarten    Kinderhaus    85540    Haar    Hans-Pinsel-Straße    9b           
4476584953    node    11.5148195    48.0654931    kindergarten    Kinderhaus St. Gabriel Nord                        http://www.kinderhaus.st.gabrielsolln.de/   
4670738346    node    11.5144853    48.0643890    kindergarten    Klosterfrösche                        http://www.klosterfroesche.de   
4670738347    node    11.5152132    48.0646958    kindergarten    Klosterspatzen                        https://klosterspatzen.de/   
4670738348    node    11.5147286    48.0648090    kindergarten    Kinderhaus St. Gabriel Süd                        http://www.kinderhaus.st.gabrielsolln.de/

man könnte hier auch 'aroundRadius' verwenden:

'aroundRadius' und 'aroundLatLng' - die hierfür notwendigen Daten hab ich ja in dem Datensatz.

Code:
this.index.search(query,{

      filters: filters,
      aroundLatLng: location,
      aroundRadius: radius

    }).then((data) => {     
      console.log(data);
    })

Ich habe hier diese man-pages gefunden

https://www.algolia.com/doc/guides/...lter-results-around-a-location/?client=python

Filter Results Around a Location

Code:
[
{
    "objectID": "3797",
    "name": "John F Kennedy Intl",
    "city": "New York",
    "country": "United States",
    "iata_code": "JFK",
    "_geoloc": {
      "lat": 40.639751,
      "lng": -73.778925
    },
    "links_count": 911
  }
]

To tell Algolia where each record is located, we need to have the latitude and longitude stored in the _geoloc attribute. You can download the dataset here. Have look at how to import it in Algolia here.

Code:
Initialize the client#
from algoliasearch.search_client import SearchClient

client = SearchClient.create('YourApplicationID', 'YourAdminAPIKey')
index = client.init_index('your_index_name')



Configure Index Settings#
Even if we want to sort by distance to a location we need the textual relevance to be good in case refine the search with a query.

For that lets configure the index.


Code:
index.set_settings(
  searchableAttributes: [
    'name',
    'city',
    'country',
    'iata_code'
  ],
  customRanking: [
    'desc(links_count)'
  ]
)

Searchable attributes#

We’re going to search in our 4 textual attributes: name, city, country and iata_code.

Custom Ranking#
Lets use the number of other connected airports to any airport as a ranking metric. The more connection the better.

Ranking#
When filtering around a location, Algolia can also sort the results by distance from this location.

The sorting by distance happens in the criterion geo of the ranking formula. If you don’t have this criterion active, you cannot sort by distance.

Filtering around a given location#
Let’s filter airports around New York City. New York City has a latitude of 40.71 and a longitude of -74.01.
We are going to use the aroundLatLng parameter.

Code:
results = index.search('', {
    'aroundLatLng': '40.71, -74.01'
})

vgl auch hier: https://www.algolia.com/doc/guides/...lter-results-around-a-location/?client=python
 
Zuletzt bearbeitet:
Wenn es für eine Webanwendung gedacht ist würde ich das nie und nimmer in Excel-Dateien auslagern sondern gleich auf richtige Datenbanken setzen.
 
Oi, da habe ich mich in den Anforderungen wohl etwas vertan. Ich dachte es geht um reines Excel und das einfache Anzeigen mehrere Treffer aus mehreren Dateien. Ich habe deinen Beitrag jetzt nicht 100% verstanden weil das Thema doch sehr komplex ist und ich in Sachen Webanwendungen noch nicht so weit bin, kann dir aber vielleicht ein paar Denkanstöße geben. Vielleicht hilfts ja :)

In einer SQL Datenbank lagern anstatt Excel, dann kannst du das mit einer einfachen Abfrage alles catchen. Andere Möglichkeit wäre Python mit Pandas (oder jede andere Programmiersprache mit entsprechender Library), dann wäre das Eingabeformat (Excel, CSV, SQL) egal und es würde sich vermutlich auch einfacher im gewünschten Format zurücksenden lassen. Wäre dann eine einfache API: Request mit Koordinaten/PLZ senden, Backend durchsucht die Datenbank/Tabellen und sendet das Ergebnis zurück.

Bin da nicht so der Experte drin, deswegen kann ich nur bedingt helfen falls du Fragen hast :)
 
  • Gefällt mir
Reaktionen: tarifa
Zurück
Oben