練習:使用 count 函式計算事件

已完成

您可以使用 Kusto 查詢來探索資料集並取得見解。 回想一下,我們有一個氣象資料集,並想要比較事件,以從此資料取得深入解析。 在此,您將瞭解特定區域中發生多少特定類型的事件。

使用 count 函式

我們在 2007 年美國所使用的每個暴風雨事件都有一個樣本資料庫,總計有 6 萬筆記錄。

若要將這些事件分組為資訊區塊,您將使用 summarize 運算子。 summarize 會用於彙總數個資料列值群組,以形成單一摘要值的所有函式。 例如,您可以使用下列查詢來計算結果數目,以摘要整份資料表:

執行查詢

螢幕擷取畫面顯示 count 運算子的一般查詢與查詢。

您也可以藉由指定要分組彙總的方式,將資料摘要成類似型別的事件群組。 例如,若要依狀態計算事件,您可以透過 state 將查詢寫入至 summarize count。 事實上,上一句與實際查詢的非常類似。 您將使用稱為 count() 的彙總函式,其會依群組計算資料列的數目。 此函式會產生新的資料行,提供依狀態分組的事件計數,我們已在查詢內將此資料行從預設名稱 count_ 重新命名為 EventCount。 重新命名新的資料行是建議做法,讓查詢及其結果更容易閱讀。

  1. 將查詢複製並貼上查詢編輯器中。

    執行查詢

    StormEvents
    | summarize EventCount = count() by State
    | sort by EventCount
    
  2. 選取查詢視窗上方的 [執行] 按鈕或按 Shift+Enter 鍵來執行查詢。

    您應該會取得如下圖所示的結果:

    螢幕擷取畫面顯示 count 運算子的一般查詢與查詢。

使用 dcount()countif() 函式

先前的查詢會傳回每個狀態的事件數目。 不過,有更複雜的方法來計數事件。

  • 例如,您只能計數特定類型的事件。 countif() 函式會計數述詞為 true 的記錄。 使用 countif(DamageCrops > 0) 的查詢將計算裁剪損毀大於零的記錄數目。
  • 您也可以使用 dcount() 函式來計數不同類型的事件。

我們已建構使用 summarize 運算子並搭配這些 count 函式的查詢來回答下列問題:

  • 各州發生多少次暴風雨事件?
  • 每州中有多少個事件造成損害?
  • 每州中發生了多少不同類型的事件?

請注意,summarize 運算子中的所有元素皆以逗號分隔,並依相同的資料行分組,在此案例中為 State。 運算子中未命名的資料行 summarize 會遭卸除。 如果想要包含其他資料行,請以摘要資料的資料行命名它們。

  1. 執行下列查詢:

    執行查詢

    StormEvents
    | summarize count(),
        EventsWithDamageToCrops = countif(DamageCrops > 0),
        Count = dcount(EventType) by State
    | sort by Count
    

    您應該會取得如下圖所示的結果:

    螢幕擷取畫面顯示依狀態計數事件的 Kusto 查詢。

  2. 請注意結果中的資料行名稱。 查詢的哪個部分會對應至每個資料行? 您可以看到 dcount() 函式已建立新的資料行,並將其命名為 Count。 您也會注意到,您已將此名稱當做查詢中 sort 運算子的資料行使用。 德州有多少不同類型的暴風雨?

使用 distinct 運算子

上一個查詢在這項資料涵蓋期間,傳回德州中有 27 種不同類型暴風雨的相異計數。 進一步向下切入並查看所有類型的暴風雨名稱,別具趣味性。 若要查看德州中每個不同種類型的事件的清單,請使用 distinct() 運算子,其將列出特定資料行的相異值。

  1. 執行下列查詢:

    執行查詢

    StormEvents
    | where State == "TEXAS"
    | distinct EventType
    | sort by EventType asc
    

    您應該會取得如下圖所示的結果:

    螢幕擷取畫面顯示使用 distinct 運算子來進行 Kusto 查詢。

  2. 查看結果產生的清單。 有無任何暴風雨類型令您感到意外?