make-series 運算子

沿著指定的軸建立一系列指定的彙總值。

語法

T| make-series [MakeSeriesParameters] [Column=] Aggregation [default=DefaultValue] [, ...] onAxisColumn [fromstart] [toend] stepstep [by [Column=] GroupExpression [, ...]]

深入瞭解 語法慣例

參數

名稱 類型 必要 Description
資料行 string 結果數據行的名稱。 預設值為衍生自運算式的名稱。
DefaultValue 純量 (scalar) 要使用的預設值,而不是不存在的值。 如果沒有 具有 AxisColumnGroupExpression 特定值的數據列,則會指派陣列的對應元素 DefaultValue。 預設值為 0。
彙總 string ✔️ 呼叫 聚合函數,例如 count()avg(),且數據行名稱為自變數。 請參閱彙總函式清單。 只有傳回數值結果的彙總函式可以搭配 make-series 運算子使用。
AxisColumn string ✔️ 將排序數列的數據行。 通常數據行值的類型為 datetime 或 , timespan 但會接受所有數值類型。
開始 純量 (scalar) ✔️ 要建置之每個數列 的 AxisColumn 低界限值。 如果未指定 start ,它會是每個數列中具有數據的第一個量化或步驟。
end 純量 (scalar) ✔️ AxisColumn 的高界限非內含值。 時間序列的最後一個索引小於此值,而且會開始加上小於結尾步驟的整數倍數。 如果未指定 end ,則會是最後一個量化或步驟的上限,且每個數列都有數據。
純量 (scalar) ✔️ AxisColumn 陣列的兩個連續元素之間的差異或 bin 大小。 如需可能的時間間隔清單,請參閱時間範圍
GroupExpression 提供一組相異值之數據行的表達式。 通常是已提供有限的一組值的資料行名稱。
MakeSeriesParameters 以名稱=的形式分隔零個或多個空格分隔參數,可控制行為。 請參閱 支援的make series 參數

注意

開始結束步驟參數是用來建置 AxisColumn 值的陣列。 陣列是由 開始結束之間的值所組成,而 步驟 值代表一個陣列元素與下一個陣列元素之間的差異。 所有 Aggregation 值都會分別針對此陣列進行排序。

支援的Make系列參數

名稱 描述
kind 當 make-series 運算子的輸入空白時,就會產生預設結果。 值:nonempty
hint.shufflekey=<key> shufflekey 查詢會使用索引鍵來分割資料,以共用叢集節點上的查詢負載。 請參閱隨機查詢

注意

由 make-series 產生的陣列限制為 1048576 個值 (2^20)。 嘗試使用 make-series 產生更大的陣列會導致錯誤或截斷的陣列。

替代語法

T| make-series [Column=] Aggregation [default=DefaultValue] [, ...] onAxisColumninrange(start,stop,step) [by [Column=] GroupExpression [, ...]]

從替代語法產生的數列與主要語法有兩個不同之處:

  • stop 值包含在內。
  • 索引軸分箱是以 bin() (而不是 bin_at()) 產生,這表示 start 可能不會包含在所產生的數列中。

建議使用make-series的主要語法,而不是替代語法。

傳回

輸入資料列會各自分組到具有相同 by 運算式和 bin_at(AxisColumn,step,start) 運算式值的群組。 然後指定的彙總函式會針對每個群組進行計算,以便為每個群組產生資料列。 結果會包含 by 資料行、AxisColumn 資料行,而且每個經過計算的彙總至少會有一個資料行。 不支援對多個數據行或非數值結果進行匯總 (。)

此中繼結果具有的資料列數與相異的 bybin_at(AxisColumn,step,start) 值組合一樣多。

最後,中繼結果中的資料列會各自分組到具有相同 by 運算式值的群組,而且所有彙總值都會排列成陣列(dynamic 類型的值)。 針對每個匯總,有一個數據行包含具有相同名稱的陣列。 最後一個資料行是一個陣列,其中包含根據指定步驟分類的 AxisColumn

注意

雖然您可以為彙總與群組運算式提供任意運算式,但更有效率的方法是使用簡單的資料行名稱。

彙總函式清單

函式 描述
avg() 傳回整個群組的平均值
avgif() 使用群組的述詞傳回平均值
count() 傳回群組的計數
countif() 傳回包含群組述詞的計數
dcount() 傳回群組元素的近似相異計數
dcountif() 使用群組的述詞傳回近似相異計數
max() 傳回整個群組的最大值
maxif() 使用群組的述詞傳回最大值
min() 傳回整個群組的最小值
minif() 使用群組的述詞傳回最小值
percentile() 傳回整個群組的百分位數值
take_any() 傳回群組的隨機非空白值
stdev() 傳回整個群組的標準差
sum() 傳回群組內元素的總和
sumif() 使用群組的述詞傳回元素的總和
variance() 傳回整個群組的變異數

數列分析函式清單

函式 描述
series_fir() 套用有限脈衝響應濾波器
series_iir() 套用無限脈衝響應濾波器
series_fit_line() 尋找是輸入最佳近似的一條直線
series_fit_line_dynamic() 尋找是輸入最佳近似的一條線,並傳回動態物件
series_fit_2lines() 尋找是輸入最佳近似的兩條線
series_fit_2lines_dynamic() 尋找是輸入最佳近似的兩條線,並傳回動態物件
series_outliers() 將數列中的異常點評分
series_periods_detect() 尋找存在於時間序列中的最重要週期
series_periods_validate() 檢查時間序列是否包含指定長度的定期模式
series_stats_dynamic() 傳回具有一般統計資料 (最小值/最大值/變異數/標準差/平均值) 的多個資料行
series_stats() 產生具有一般統計資料 (最小值/最大值/變異數/標準差/平均值) 的動態值

如需數列分析函式的完整清單,請參閱: 數列處理函式

數列插補函式清單

函式 描述
series_fill_backward() 對數列中的遺漏值執行向後填滿插補
series_fill_const() 以指定的常數值取代數列中的遺漏值
series_fill_forward() 對數列中的遺漏值執行向前填滿插補
series_fill_linear() 對數列中的遺漏值執行線性插補
  • 注意:插補函式預設會將 null 假定為遺漏值。 因此,如果您想要使用數列的插補函式,請在 make-series 中指定 default=double(null)。

範例

有一個資料表,其中顯示每個供應商每種水果的數量和平均價格陣列 (依指定範圍內的時間戳記排序)。 對於水果與供應商的每種相異組合,輸出中都會有一個資料列。 輸出資料行會顯示水果、供應商,以及計數、平均和整個時間軸 (從 2016-01-01 到 2016-01-10) 的陣列。 所有陣列都會依各自的時間戳記排序,而所有空白處都會填入預設值 (在此範例中為 0)。 其他所有輸入資料行則會遭到忽略。

T | make-series PriceAvg=avg(Price) default=0
on Purchase from datetime(2016-09-10) to datetime(2016-09-13) step 1d by Supplier, Fruit

三個資料表。第一個列出原始資料,第二個只有相異的供應商-水果-日期組合,而第三個則包含 make-series 結果。

let data=datatable(timestamp:datetime, metric: real)
[
  datetime(2016-12-31T06:00), 50,
  datetime(2017-01-01), 4,
  datetime(2017-01-02), 3,
  datetime(2017-01-03), 4,
  datetime(2017-01-03T03:00), 6,
  datetime(2017-01-05), 8,
  datetime(2017-01-05T13:40), 13,
  datetime(2017-01-06), 4,
  datetime(2017-01-07), 3,
  datetime(2017-01-08), 8,
  datetime(2017-01-08T21:00), 8,
  datetime(2017-01-09), 2,
  datetime(2017-01-09T12:00), 11,
  datetime(2017-01-10T05:00), 5,
];
let interval = 1d;
let stime = datetime(2017-01-01);
let etime = datetime(2017-01-10);
data
| make-series avg(metric) on timestamp from stime to etime step interval 
avg_metric timestamp
[ 4.0, 3.0, 5.0, 0.0, 10.5, 4.0, 3.0, 8.0, 6.5 ] [ "2017-01-01T00:00:00.0000000Z", "2017-01-02T00:00:00.0000000Z", "2017-01-03T00:00:00.0000000Z", "2017-01-04T00:00:00.0000000Z", "2017-01-05T00:00:00.0000000Z", "2017-01-06T00:00:00.0000000Z", "2017-01-07T00:00:00.0000000Z", "2017-01-08T00:00:00.0000000Z", "2017-01-09T00:00:00.0000000Z" ]

當 的輸入 make-series 是空的時,的預設行為 make-series 會產生空的結果。

let data=datatable(timestamp:datetime, metric: real)
[
  datetime(2016-12-31T06:00), 50,
  datetime(2017-01-01), 4,
  datetime(2017-01-02), 3,
  datetime(2017-01-03), 4,
  datetime(2017-01-03T03:00), 6,
  datetime(2017-01-05), 8,
  datetime(2017-01-05T13:40), 13,
  datetime(2017-01-06), 4,
  datetime(2017-01-07), 3,
  datetime(2017-01-08), 8,
  datetime(2017-01-08T21:00), 8,
  datetime(2017-01-09), 2,
  datetime(2017-01-09T12:00), 11,
  datetime(2017-01-10T05:00), 5,
];
let interval = 1d;
let stime = datetime(2017-01-01);
let etime = datetime(2017-01-10);
data
| take 0
| make-series avg(metric) default=1.0 on timestamp from stime to etime step interval 
| count 

輸出

計數
0

make-series 中使用 kind=nonempty 將會產生預設值的非空白結果:

let data=datatable(timestamp:datetime, metric: real)
[
  datetime(2016-12-31T06:00), 50,
  datetime(2017-01-01), 4,
  datetime(2017-01-02), 3,
  datetime(2017-01-03), 4,
  datetime(2017-01-03T03:00), 6,
  datetime(2017-01-05), 8,
  datetime(2017-01-05T13:40), 13,
  datetime(2017-01-06), 4,
  datetime(2017-01-07), 3,
  datetime(2017-01-08), 8,
  datetime(2017-01-08T21:00), 8,
  datetime(2017-01-09), 2,
  datetime(2017-01-09T12:00), 11,
  datetime(2017-01-10T05:00), 5,
];
let interval = 1d;
let stime = datetime(2017-01-01);
let etime = datetime(2017-01-10);
data
| take 0
| make-series kind=nonempty avg(metric) default=1.0 on timestamp from stime to etime step interval 

輸出

avg_metric timestamp
[
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0,
1.0
]
[
"2017-01-01T00:00:00.0000000Z",
"2017-01-02T00:00:00.0000000Z",
"2017-01-03T00:00:00.0000000Z",
"2017-01-04T00:00:00.0000000Z",
"2017-01-05T00:00:00.0000000Z",
"2017-01-06T00:00:00.0000000Z",
"2017-01-07T00:00:00.0000000Z",
"2017-01-08T00:00:00.0000000Z",
"2017-01-09T00:00:00.0000000Z"
]