Moin In die Runde,
ich habe mich noch mal intensiver mit der Abfrage beschäftigt, den Aufbau des Abrufes von 30 umgeändert und auch mithilfe einer Umgehend das Ergbnis so hin bekommen, wie ich es hätte .. statt Polska erscheint Polen, statt Maroch jetzt Marokko und Rabat wird sauber dargestellt.. Mein Monk ist nun zufrieden
hier die Lösung .. falls jemand mal hat
Ortname und Land als Dynamische Tabelle (Name tableOrt)
dort die Namen Orte und Länder Eintragen.
Abfrage in PQ
let
Quelle = Excel.CurrentWorkbook(){[Name="tblOrte"]}[Content],
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"Ort", type text}, {"Land", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "Geo", each fnGeo([Ort],[Land])),
#"Erweiterte Geo" = Table.ExpandRecordColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Geo", {"lat", "lon"}, {"Geo.lat", "Geo.lon"}),
#"Hinzugefügte benutzerdefinierte Spalte2" = Table.AddColumn(#"Erweiterte Geo", "Land Sauber", each if [Land] = "Maroc" then "Marokko"
else if [Land] = "Morocco" then "Marokko"
else if [Land] = "Germany" then "Deutschland"
else if [Land] = "Polska" then "Polen"
else [Land]),
#"Hinzugefügte benutzerdefinierte Spalte1" = Table.AddColumn(#"Hinzugefügte benutzerdefinierte Spalte2", "Ort Sauber", each if Text.StartsWith([Ort], "Rabat") then "Rabat" else [Ort])
in
#"Hinzugefügte benutzerdefinierte Spalte1"
dann Funktion fnGeo generieen:
let
fnGeo = (Ort as text, Land as text) =>
let
Adresse = Ort & ", " & Land,
Quelle =
Function.InvokeAfter(
() =>
Json.Document(
Web.Contents(
"https://nominatim.openstreetmap.org/search",
[
Query = [
format = "json",
q = Adresse,
addressdetails = "1",
limit = "1"
],
Headers = [
#"User-Agent" = "ExcelGeoTool/1.0"
]
]
)
),
#duration(0,0,0,1)
),
ErsterTreffer =
if List.Count(Quelle) > 0
then Quelle{0}
else null,
AdresseRecord =
if ErsterTreffer <> null
then ErsterTreffer[address]
else null,
Ortsname =
if AdresseRecord <> null then
if Record.HasFields(AdresseRecord, "city") then AdresseRecord[city]
else if Record.HasFields(AdresseRecord, "town") then AdresseRecord[town]
else if Record.HasFields(AdresseRecord, "village") then AdresseRecord[village]
else if Record.HasFields(AdresseRecord, "municipality") then AdresseRecord[municipality]
else Ort
else Ort,
Landname =
if AdresseRecord <> null and Record.HasFields(AdresseRecord, "country") then
AdresseRecord[country]
else
Land,
Ergebnis =
[
Ort = Ortsname,
Land = Landname,
lat =
if ErsterTreffer <> null
then ErsterTreffer[lat]
else null,
lon =
if ErsterTreffer <> null
then ErsterTreffer[lon]
else null
]
in
Ergebnis,
#"In Tabelle konvertiert" = #table(1, {{fnGeo}}),
Column1 = #"In Tabelle konvertiert"{0}[Column1]
in
Column1
Passt wunderbar :-D
jetzt nur noch schauen, was passiert, wenn es in einem Land mehrere Orte namesgleich gibt, momentan nimmt er denb ersten Trefer ...
mal schauen, wie ich das Abfange.
Ich schließe das Thema erstmal ..
Danke
Gruß Armin