Alessio
Alessio

Reputation: 55

Kusto Timeseries fill up missing values for timechart

I want to render a timechart which counts the SoftwareVersion based on 1 day steps. I have to fill up forward missing values per day and serial.

The data to start with is:

let swVersions = datatable(Date: datetime, SoftwareVersion: string, Serial: string) [
datetime(2022-01-24T13:18:20.8450657Z), '1.29.0', '310160039',
datetime(2022-01-26T06:01:41.8742421Z), '1.30.0', '310160039',
datetime(2022-01-26T12:12:23.2342343Z), '1.31.0', '310160039',
datetime(2022-01-28T12:10:14.3620707Z), '1.17.0', '310160039',
datetime(2022-01-24T05:48:58.9000481Z), '1.29.0', '310160040',
datetime(2022-01-24T10:22:23.4457354Z), '1.30.0', '310160040',
datetime(2022-01-24T15:52:16.2342152Z), '1.29.0', '310160040',
datetime(2022-01-25T05:48:58.9012738Z), '1.30.0', '310160040'];

So i need the data like this for rendering the timechart (expected):

let swVersions = datatable(Date: datetime, SoftwareVersion: string, Serial: string) [
datetime(2022-01-24T00:00:00.0000000Z), '1.29.0', '310160039',
datetime(2022-01-25T00:00:00.0000000Z), '1.29.0', '310160039',
datetime(2022-01-26T00:00:00.0000000Z), '1.31.0', '310160039',
datetime(2022-01-27T00:00:00.0000000Z), '1.31.0', '310160039',
datetime(2022-01-28T00:00:00.0000000Z), '1.17.0', '310160039',
datetime(2022-01-24T00:00:00.0000000Z), '1.29.0', '310160040',
datetime(2022-01-25T00:00:00.0000000Z), '1.30.0', '310160040',
datetime(2022-01-26T00:00:00.0000000Z), '1.30.0', '310160040',
datetime(2022-01-27T00:00:00.0000000Z), '1.30.0', '310160040',
datetime(2022-01-28T00:00:00.0000000Z), '1.30.0', '310160040'];

And summarize and rendering timechart like this:

let swVersions = datatable(Date: datetime, SoftwareVersion: string, Serial: string) [
datetime(2022-01-24T00:00:00.0000000Z), '1.29.0', '310160039',
datetime(2022-01-25T00:00:00.0000000Z), '1.29.0', '310160039',
datetime(2022-01-26T00:00:00.0000000Z), '1.31.0', '310160039',
datetime(2022-01-27T00:00:00.0000000Z), '1.31.0', '310160039',
datetime(2022-01-28T00:00:00.0000000Z), '1.17.0', '310160039',
datetime(2022-01-24T00:00:00.0000000Z), '1.29.0', '310160040',
datetime(2022-01-25T00:00:00.0000000Z), '1.30.0', '310160040',
datetime(2022-01-26T00:00:00.0000000Z), '1.30.0', '310160040',
datetime(2022-01-27T00:00:00.0000000Z), '1.30.0', '310160040',
datetime(2022-01-28T00:00:00.0000000Z), '1.30.0', '310160040'];
swVersions
| summarize count() by Date, SoftwareVersion
| render timechart

How can I do this? I am very appreciated for your help.

Upvotes: 3

Views: 1692

Answers (1)

David דודו Markovitz
David דודו Markovitz

Reputation: 44981

render timechart with (accumulate=true)

let swVersions = datatable(Date: datetime, SoftwareVersion: string, Serial: string) 
[
    datetime(2022-01-24T13:18:20.8450657Z), '1.29.0', '310160039',
    datetime(2022-01-26T06:01:41.8742421Z), '1.30.0', '310160039',
    datetime(2022-01-26T12:12:23.2342343Z), '1.31.0', '310160039',
    datetime(2022-01-28T12:10:14.3620707Z), '1.17.0', '310160039',
    datetime(2022-01-24T05:48:58.9000481Z), '1.29.0', '310160040',
    datetime(2022-01-24T10:22:23.4457354Z), '1.30.0', '310160040',
    datetime(2022-01-24T15:52:16.2342152Z), '1.29.0', '310160040',
    datetime(2022-01-25T05:48:58.9012738Z), '1.30.0', '310160040'
];
let swVersions_daily_version = swVersions | summarize arg_max(Date, *) by Serial, Date = startofday(Date);
let swVersions_adds = swVersions_daily_version | extend delta = 1;
let swVersions_drops =
swVersions_daily_version
|   extend delta = -1
|   partition hint.strategy=native by Serial
    (
            order by Date asc
        |   extend Date = next(Date)
        |   where isnotnull(Date)
    )
;
let Date_start  = toscalar(swVersions | summarize startofday(min(Date)));
let Date_end    = toscalar(swVersions | summarize max(Date));
union swVersions_adds, swVersions_drops
| make-series sum(delta) on Date from Date_start to Date_end step 1d by SoftwareVersion
| render timechart with (accumulate=true)

Timechart

Fiddle

Upvotes: 3

Related Questions