Ćwiczenie — wprowadzanie zmiennych przy użyciu instrukcji let
Użyliśmy zestawu danych meteorologicznych do agregowania i wizualizowania danych. W tym miejscu dowiesz się, jak używać let
instrukcji do wprowadzania zmiennych i organizowania złożonych zapytań.
let
instrukcje są przydatne do podzielenia złożonego wyrażenia na wiele części, definiowania stałych poza treścią zapytania pod kątem czytelności lub definiowania zmiennej raz i wielokrotnego użycia w zapytaniu. Instrukcje umożliwiają let
tworzenie dobrze zorganizowanych złożonych zapytań. Można użyć wielu let
instrukcji; każda instrukcja musi być zgodna ze średnikiem (;
).
Instrukcje można używać let
w różnych sytuacjach. Na najprostszym poziomie można zdefiniować wartości skalarne, które później będą przywoływały się w zapytaniu, takie jak int, ciąg, data/godzina lub dowolna inna wartość. Możesz utworzyć tabelaryczny filtrowany widok tabeli, który będzie używany jako dane wejściowe tabelaryczne dla zapytania. Funkcję można również utworzyć przy użyciu instrukcji let
.
Definiowanie skalarnego za pomocą instrukcji let
Pamiętaj, że poprzednie zapytania filtrowane według lokalizacji lub minimalnych uszkodzeń. Zdefiniujmy te wartości granic przy użyciu let
instrukcji na początku zapytania.
Poniższe zapytanie używa dwóch let
instrukcji do zdefiniowania wartości skalarnych, które będą później używane jako parametry wejściowe w zapytaniu. Pierwsza zdefiniowana wartość to liczba, a druga to ciąg. Instrukcje let
kończą się średnikiem.
Zwróć uwagę na fragmenty komentarza zapytania, które zaczynają się od podwójnych ukośników (//
). Podwójne ukośniki wskazują początek komentarza do końca wiersza. Są to komentarze ignorowane podczas uruchamiania zapytań.
Uruchom poniższe zapytanie:
let MinDamage = 1; // int let EventLocation = "ARIZONA"; // string StormEvents | where State == EventLocation | where DamageCrops + DamageProperty >= MinDamage | summarize Damage=round(avg(DamageProperty + DamageCrops)) by EventType | sort by Damage
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Spróbuj zmienić nazwę stanu lub minimalną liczbę uszkodzeń i ponownie użyć zapytania. Jak zmieniają się wyniki?
Konwertowanie wyniku tabelarycznego na wartość skalarną przy użyciu toscalar
instrukcji let
Następnie przyjrzyjmy się liczbie najczęściej występujących typów zdarzeń jako funkcji czasu. Najpierw należy ustalić, który typ zdarzenia jest najczęściej spotykany. Następnie użyjesz tej wartości w zapytaniu. Użyj tabeli StormEvents, aby znaleźć top EventType przez zliczanie liczby zdarzeń w ramach każdego typu. Użyj operatora , project
aby zwrócić tylko kolumnę EventType .
Przed rozpoczęciem konstruowania instrukcji let
uruchom zapytanie, aby dowiedzieć się, czym jest to zdarzenie. Dzięki temu można sprawdzić, czy zapytanie generuje oczekiwane wyniki.
StormEvents
| summarize count() by EventType
| top 1 by count_
| project EventType
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Zauważysz, że zapytanie wygenerowało wynik tabelaryczny z jedną kolumną i jednym wierszem. Jednak należy przekonwertować ją na wartość skalarną, która będzie używana jako wartość filtru w zapytaniu głównym. Najpierw zdefiniuj nazwę zmiennej, którą chcemy wprowadzić jako MostFrequentEventType. Następnie chcesz przekonwertować wynik tabelaryczny na wartość skalarną, umieszczając całe zapytanie wewnątrz toscalar()
funkcji.
Poprzednie kroki zostały podsumowane w następującej let
instrukcji:
let MostFrequentEventType = toscalar(
StormEvents
| summarize count() by EventType
| top 1 by count_
| project EventType);
Zwróć uwagę, że ta instrukcja sama w sobie nie jest prawidłowym zapytaniem, ponieważ prawidłowe zapytanie musi zawierać co najmniej jedną instrukcję, która nie jest instrukcją let
. Można jednak użyć tej przechowywanej wartości skalarnej w zapytaniu. Pamiętaj, że chcesz przyjrzeć się liczbie najczęściej występujących zdarzeń jako funkcji czasu. Filtrujesz według wartości MostFrequentEventType, a następnie podsumujesz liczbę według określonego przedziału czasu.
W tym przypadku przyjrzyjmy się wynikom miesięcznie. Użyjesz startofmonth()
funkcji , która zwraca datę/godzinę reprezentującą początek miesiąca dla danej wartości daty. W tym zapytaniu użyjesz kolumny StartTime jako danych wejściowych startofmonth()
dla funkcji.
Na koniec renderuj wyniki jako wykres kolumnowy, aby uzyskać histogram liczby najczęściej spotykanych typów zdarzeń w danym miesiącu.
Uruchom poniższe zapytanie:
let MostFrequentEventType = toscalar( StormEvents | summarize count() by EventType | top 1 by count_ | project EventType); StormEvents | where EventType == MostFrequentEventType | summarize count() by startofmonth(StartTime) | render columnchart
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Spróbuj zmienić zapytanie, aby wyświetlić histogram najmniej częstego typu zdarzenia binne według miesiąca i ponownie uruchamiając zapytanie.
Konstruowanie instrukcji let
z danymi wyjściowymi tabelarycznymi
W poprzednich przykładach utworzono przechowywaną wartość skalarną do użycia jako parametr wejściowy w zapytaniu. Istnieje jednak również możliwość użycia let
instrukcji w celu utworzenia danych tabelarycznych, które są następnie używane jako dane wejściowe zapytania.
Przefiltruj tabelę StormEvents pod względem zdarzeń, które pośrednio lub bezpośrednio spowodowały śmierć. Następnie zwróć podzbiór kolumn przy użyciu
project
operatora . Ta instrukcja udostępnia tabelaryczne dane wyjściowe o nazwie KillerStorms. Użyj tejlet
instrukcji jako początkowych danych wejściowych dla zapytania.let KillerStorms = StormEvents | where DeathsDirect + DeathsIndirect > 0 | project State, EventType, Deaths=DeathsDirect + DeathsIndirect;
Następnie możesz użyć niektórych funkcji agregacji poznanych w poprzednich lekcjach. Uruchom poniższe zapytanie:
let KillerStorms = StormEvents | where DeathsDirect + DeathsIndirect > 0 | project State, EventType, Deaths=DeathsDirect + DeathsIndirect; KillerStorms | summarize DistinctKillerEventTypes=dcount(EventType), TotalDeaths=sum(Deaths) by State | sort by TotalDeaths
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Przyjrzyj się wynikom. Czy wszystkie zdarzenia są podsumowane w kolumnie DistinctKillerEventTypes tak zwane "burze zabójców?"
Tworzenie funkcji zdefiniowanej przez użytkownika za pomocą instrukcji let
Można również użyć let
instrukcji do definiowania funkcji zdefiniowanych przez użytkownika, które są podzapytaniami wielokrotnego użytku. Załóżmy, że chcesz dowiedzieć się, jaki procent każdego typu zdarzenia spowodował szkody. Utworzysz funkcję zdefiniowaną przez użytkownika, która oblicza wartości procentowe, a później wywoła tę funkcję i określisz, które kolumny mają być używane do obliczenia wartości procentowej.
W instrukcji let
zadeklarujesz nazwę funkcji, argumenty i treść przy użyciu następującej składni ogólnej:
let function=(argument1:datatype, argument2:datatype) {functionbody};
W szczególności użyjesz funkcji zdefiniowanej przez użytkownika do obliczenia wartości procentowych. Najpierw zdefiniuj typ danych i argumenty wejściowe. W tym przykładzie użyjesz następujących argumentów:
Nazwa argumentu | Typ danych | opis |
---|---|---|
część | real |
Część łącznych zdarzeń, dla których chcesz obliczyć wartość procentową. |
total | real |
Całkowita liczba zdarzeń. |
Zaokrąglisz odpowiedź na dwa miejsca dziesiętne przy użyciu round()
funkcji .
W sumie zdefiniowana przez użytkownika funkcja opisana przez instrukcję let
to:
let Pcent = (portion:real, total:real){round(100 * portion / total, 2)};
Użyj tej
let
instrukcji w następującym zapytaniu:let Pcent = (portion: real, total: real) { round(100 * portion / total, 2) }; StormEvents | extend Damage = DamageCrops + DamageProperty | summarize TotalEvents = count(), TotalDamagingEvents = countif(Damage > 0) by EventType | project EventType, TotalDamagingEvents, TotalEvents, Percentage = Pcent(TotalDamagingEvents, TotalEvents) | sort by EventType asc
Powinny zostać wyświetlone wyniki, które wyglądają jak na poniższej ilustracji:
Pośmiń chwilę, aby zrozumieć wyniki. Spróbuj zmodyfikować zapytanie, aby wyświetlić podział procentu według typu uszkodzenia i ponowne uruchomienie zapytania.
Przyjrzyj się wynikom. Co oznacza wartość procentowa? Zwróć uwagę, że zapytanie wywołuje funkcję Pcent zdefiniowaną w instrukcji let
. Dane wejściowe używane w tej funkcji to TotalDamagingEvents i TotalEvents, co oznacza, że szukasz procentu zdarzeń, które spowodowały uszkodzenie.