dcountif() (彙總函式)

針對述評估true為的數據列,估計expr相異值的數目。

Null 值會被忽略,且不會納入計算中。

注意

此函式會與 summarize 運算子搭配使用。

Syntax

dcountif(expr述詞, [,精確度])

深入瞭解 語法慣例

參數

名稱 類型 必要 Description
expr string ✔️ 用於匯總計算的表達式。
predicate string ✔️ 用來篩選數據列的表達式。
精度 int 速度與精確度之間的控制。 如果未指定,則預設值為 1。 如需支援的值,請參閱 估計精確度

傳回

針對述評估true為的數據列,傳回expr相異值的估計值。

提示

dcountif() 如果所有數據列或沒有任何數據列傳遞 Predicate 表達式,可能會傳回錯誤。

範例

此範例顯示每個狀態中發生多少類型的嚴重 Storm 事件。

StormEvents
| summarize DifferentFatalEvents=dcountif(EventType,(DeathsDirect + DeathsIndirect)>0) by State
| where DifferentFatalEvents > 0
| order by DifferentFatalEvents 

顯示的結果數據表只包含前10個數據列。

狀態 DifferentFatalEvents
加利福尼亞州 12
德克薩斯州 12
奧克拉何馬州 10
伊利諾州 9
堪薩斯州 9
紐約 9
紐澤西州 7
WASHINGTON 7
密西根 7
密蘇里州 7
... ...

估計的正確性

此函式會使用 HyperLogLog (HLL) 演演算法的變體,該演算法會執行設定基數的隨機估計。 此演算法提供 "knob",可用來平衡每個記憶體大小的精確度和執行時間:

精確度 錯誤 (%) 項目計數
0 1.6 212
1 0.8 214
2 0.4 216
3 0.28 217
4 0.2 218

注意

「項目計數」資料行是 HLL 實作中 1 位元組計數器的數目。

如果設定的基數夠小,此演算法就會包含一些執行最佳計數 (零錯誤) 的條款:

  • 當精確度層級為 1 時,會傳回 1000 個值
  • 當精確度層級為 2 時,會傳回 8000 個值

誤差界限是概率,不是理論上的界限。 值會是誤差分佈的標準差 (sigma),而 99.7% 的估計會有 3 x sigma 以下的相對誤差。

下圖會針對所有支援的精確度設定,說明相對估計誤差的機率分佈函式 (以百分比表示):

顯示 hll 錯誤分佈的圖表。