> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-vortex-format.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> يحسب قيمة `mad_over_time` في PromQL على شبكة زمنية منتظمة.

# timeSeriesMadToGrid

<h2 id="timeSeriesMadToGrid">
  timeSeriesMadToGrid
</h2>

أُضيف في: v26.10.0

دالة تجميعية تأخذ بيانات السلاسل الزمنية على هيئة أزواج من الطوابع الزمنية والقيم، وتحسب دالة [PromQL `mad_over_time`](https://prometheus.io/docs/prometheus/latest/querying/functions/#aggregation_over_time) على شبكة زمنية منتظمة يحددها طابع زمني للبداية وطابع زمني للنهاية وخطوة. وتكون النتيجة لكل نقطة على الشبكة هي الانحراف المطلق الوسيط `median(|x - median(x)|)` لقيم العينات ضمن النافذة الزمنية المحددة. ويُحسب كلا الوسيطين بطريقة R-7 (الشاملة)، على غرار `quantileExactInclusive` و`timeSeriesQuantileToGrid`.

يمكن تمرير العينات بأحد الأشكال الثلاثة التالية:

* على هيئة وسيطتين `timestamp` و`value`، بحيث يحتوي كل صف على عينة واحدة؛
* على هيئة مصفوفتين من الطوابع الزمنية والقيم، بحيث يحتوي كل صف على سلسلة زمنية كاملة؛
* على هيئة مصفوفة واحدة من صفوف مرتبة بالشكل `(timestamp, value)`، بحيث يحتوي كل صف على سلسلة زمنية كاملة.

وكما في Prometheus، تكون النتيجة NaN إذا كانت أي عينة في النافذة تساوي NaN. وتكون كذلك NaN إذا كان وسيط النافذة لا نهائيًا، لأن انحرافات العينات المساوية له تساوي `Inf - Inf`.

إذا اشتركت عدة عينات في الطابع الزمني نفسه، فلا تُستخدم إلا واحدة منها، وهي العينة ذات القيمة الأكبر. وتُقدَّم أي قيمة أخرى على القيمة NaN، لذا لا تُستخدم NaN إلا إذا كانت جميع العينات عند هذا الطابع الزمني تساوي NaN.

<Note>
  هذه الدالة في مرحلة المعاينة الخاصة، ويمكنك تفعيلها بضبط الإعداد `enable_time_series_aggregate_functions=true`.
</Note>

**الصيغة**

```sql theme={null}
timeSeriesMadToGrid(start_timestamp, end_timestamp, grid_step, staleness)(timestamp, value)
timeSeriesMadToGrid(start_timestamp, end_timestamp, grid_step, staleness)(samples)
```

**المعلمات**

* `start_timestamp` — يحدد بداية الشبكة. ويمكن أن يكون أيضًا عددًا كسريًا، أو سلسلة نصية تحتوي على عدد أو على نص يمثل تاريخًا ووقتًا. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `end_timestamp` — يحدد نهاية الشبكة. ويمكن أن يكون أيضًا عددًا كسريًا، أو سلسلة نصية تحتوي على عدد أو على نص يمثل تاريخًا ووقتًا. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `grid_step` — يحدد خطوة الشبكة بالثواني. ويمكن أن يكون أيضًا عددًا كسريًا، أو سلسلة نصية تحتوي على عدد أو على مدة مثل '15s' أو '1m'. [`UInt32`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)
* `staleness` — يحدد الحد الأقصى لـ "تقادم" العينات المعتمدة في الحساب، بالثواني. ونافذة التقادم فاصل زمني مفتوح من اليسار ومغلق من اليمين. ويمكن أن يكون أيضًا عددًا كسريًا، أو سلسلة نصية تحتوي على عدد أو على مدة مثل '15s' أو '1m'. [`UInt32`](/ar/reference/data-types/int-uint) أو [`Float*`](/ar/reference/data-types/float) أو [`Decimal*`](/ar/reference/data-types/decimal) أو [`String`](/ar/reference/data-types/string)

**الوسيطات**

* `timestamp` — الطابع الزمني للعينة. ويمكن أن يكون قيمًا منفردة أو مصفوفات. [`UInt32`](/ar/reference/data-types/int-uint) أو [`DateTime`](/ar/reference/data-types/datetime) أو [`DateTime64`](/ar/reference/data-types/datetime64) أو [`Array(UInt32)`](/ar/reference/data-types/array) أو [`Array(DateTime)`](/ar/reference/data-types/array) أو [`Array(DateTime64)`](/ar/reference/data-types/array)
* `value` — قيمة السلسلة الزمنية المقابلة للطابع الزمني. ويمكن أن تكون قيمًا منفردة أو مصفوفات. [`Float*`](/ar/reference/data-types/float) أو [`Array(Float*)`](/ar/reference/data-types/array)
* `samples` — عينات السلسلة الزمنية، وتُمرَّر على شكل مصفوفة من الصفوف المرتبة `(timestamp, value)`، بحيث تكون أنواع عناصر الصف المرتب هي أنواع الطابع الزمني والقيمة المذكورة أعلاه. وهي بديل عن تمرير الطوابع الزمنية والقيم في وسيطتين منفصلتين. [`Array(Tuple(T1, T2))`](/ar/reference/data-types/array)

**القيمة المعادة**

تُرجع الانحراف المطلق الوسيط للقيم على الشبكة الزمنية المحددة. تحتوي المصفوفة المُرجَعة على قيمة واحدة لكل نقطة من نقاط الشبكة الزمنية. وتكون القيمة NULL إذا لم توجد أي عينات ضمن النافذة لنقطة معينة من نقاط الشبكة. [`Array(Nullable(Float64))`](/ar/reference/data-types/array)

**أمثلة**

**حساب قيم mad\_over\_time على الشبكة \[90, 105, 120, 135, 150, 165, 180, 195, 210, 225]**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    -- NOTE: the gap between 130 and 190 is to show how values are filled for ts = 180 according to window parameter
    [110, 120, 130, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 3, 2, 6, 6, 4, 2, 0]::Array(Float32) AS values, -- array of values corresponding to timestamps above
    90 AS start_ts,       -- start of timestamp grid
    90 + 135 AS end_ts,   -- end of timestamp grid
    15 AS step_seconds,   -- step of timestamp grid
    45 AS window_seconds  -- "staleness" window
SELECT timeSeriesMadToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)
FROM
(
    -- This subquery converts arrays of timestamps and values into rows of `timestamp`, `value`
    SELECT
        arrayJoin(arrayZip(timestamps, values)) AS ts_and_val,
        ts_and_val.1 AS timestamp,
        ts_and_val.2 AS value
);
```

```response title=Response theme={null}
┌─timeSeriesMadToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamp, value)─┐
│ [NULL,NULL,1,1,1,0,NULL,0,0,1]                                                        │
└───────────────────────────────────────────────────────────────────────────────────────┘
```

**الاستعلام نفسه باستخدام وسيطات من نوع مصفوفة**

```sql title=Query theme={null}
SET enable_time_series_aggregate_functions = 1;
WITH
    [110, 120, 130, 190, 200, 210, 220, 230]::Array(DateTime) AS timestamps,
    [1, 3, 2, 6, 6, 4, 2, 0]::Array(Float32) AS values,
    90 AS start_ts,
    90 + 135 AS end_ts,
    15 AS step_seconds,
    45 AS window_seconds
SELECT timeSeriesMadToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values);
```

```response title=Response theme={null}
┌─timeSeriesMadToGrid(start_ts, end_ts, step_seconds, window_seconds)(timestamps, values)─┐
│ [NULL,NULL,1,1,1,0,NULL,0,0,1]                                                          │
└─────────────────────────────────────────────────────────────────────────────────────────┘
```
