Azure data explorer KQL窗口函数-如何按多个列进行分区?

Azure data explorer KQL窗口函数-如何按多个列进行分区?,azure-data-explorer,kql,Azure Data Explorer,Kql,输入表1: 销售员 产品 模型 1/1/2020 汽车 1. 1/2/2020 自行车 1. 2/1/2020 汽车 2. 3/1/2020 自行车 2. 如果我正确理解了你的问题,这应该是可行的: datatable(SaleStart:datetime, Product:string, Model:int) [ datetime(1/1/2020), 'Car', 1, datetime(1/2/2020), 'Bike', 1, datetime(2/1/2020

输入表1:

销售员 产品 模型 1/1/2020 汽车 1. 1/2/2020 自行车 1. 2/1/2020 汽车 2. 3/1/2020 自行车 2.
如果我正确理解了你的问题,这应该是可行的:

datatable(SaleStart:datetime, Product:string, Model:int)
[
    datetime(1/1/2020), 'Car',  1,
    datetime(1/2/2020), 'Bike', 1,
    datetime(2/1/2020), 'Car',  2,
    datetime(3/1/2020), 'Bike', 2,
]
| order by Product asc, SaleStart asc
| extend SaleEnd = iff(next(Product) == Product and next(Model) != Model, next(SaleStart), datetime(null))
销售员 产品 模型 塞伦德 2020-01-01 00:00:00.0000000 汽车 1. 2020-02-01 00:00:00.0000000 2020-01-02 00:00:00.0000000 自行车 1. 2020-03-01 00:00:00.0000000 2020-02-01 00:00:00.0000000 汽车 2. 2020-03-01 00:00:00.0000000 自行车 2.
如果我正确理解了你的问题,这应该是可行的:

datatable(SaleStart:datetime, Product:string, Model:int)
[
    datetime(1/1/2020), 'Car',  1,
    datetime(1/2/2020), 'Bike', 1,
    datetime(2/1/2020), 'Car',  2,
    datetime(3/1/2020), 'Bike', 2,
]
| order by Product asc, SaleStart asc
| extend SaleEnd = iff(next(Product) == Product and next(Model) != Model, next(SaleStart), datetime(null))
销售员 产品 模型 塞伦德 2020-01-01 00:00:00.0000000 汽车 1. 2020-02-01 00:00:00.0000000 2020-01-02 00:00:00.0000000 自行车 1. 2020-03-01 00:00:00.0000000 2020-02-01 00:00:00.0000000 汽车 2. 2020-03-01 00:00:00.0000000 自行车 2.
为了对任何人都有用,我找到了一个比Yoni的完美解决方案更合适的解决方案

let MyTable = datatable(SaleStart:datetime, Product:string, Model:int)
[
    datetime(1/1/2020), 'Car',  1,
    datetime(1/2/2020), 'Bike', 1,
    datetime(2/1/2020), 'Car',  2,
    datetime(3/1/2020), 'Bike', 2,
];
MyTable
| partition by Product
    (
       order by Model asc
        | extend SaleEnd = next(SaleStart)
    )

在我看来,这似乎是在抽象出所需逻辑的细节,只表达思想。

如果对任何人有用,我找到了一个我更喜欢的解决方案,而不是Yoni的完美解决方案

let MyTable = datatable(SaleStart:datetime, Product:string, Model:int)
[
    datetime(1/1/2020), 'Car',  1,
    datetime(1/2/2020), 'Bike', 1,
    datetime(2/1/2020), 'Car',  2,
    datetime(3/1/2020), 'Bike', 2,
];
MyTable
| partition by Product
    (
       order by Model asc
        | extend SaleEnd = next(SaleStart)
    )

在我看来,这似乎是为了抽象出所需逻辑的细节,仅表达思想。

啊,所以手动检查行-谢谢!如果next()使用参数PartitionByColumnList来处理这个问题,那就太好了——如果高粒度表中有许多列要处理,那么它会变得很乏味。啊,那么手动检查行-谢谢!如果next()接受一个参数PartitionByColumnList来处理这个问题,那就太好了——对于具有许多col的高粒度表来说,它会变得单调乏味。