PowerQuery范围内的范围

时间:2019-10-18 06:32:12

标签: excel powerquery

我正在尝试过滤掉大型数据集中某个值范围内的值。 我在这里摘录了一些值数据:

Chng.1      Chng.2      Length   Post   Index
117,200     117,400     200      bf     1
118,800     119,000     200      bf     2
118,939     118,949     10       bo     3
119,863     119,873     10       bo     4
120,400     121,200     800      bf     5
120,869     120,879     10       bf     6
121,400     121,600     200      bo     7
128,800     129,200     400      bo     8
129,065     129,075     10       bo     9

在这个数据集中,我希望索引6和9被过滤掉,因为它们已经包含在一个范围内。

即索引6(120,869-120,879)的价格范围在索引5(120,400-121,200)的价格范围内,并且都位于“ bf”之后。索引9也在索引8的范围内,并且共享帖子“ bo”。

谢谢。

1 个答案:

答案 0 :(得分:1)

具体来说,您的代码(后续范围在上一个代码之内)可以使用以下代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
    sort = Table.Sort(Source, List.Transform({"Post", "Chng.1", "Chng.2"}, each {_, 0})),
    group = Table.Group(sort, Table.ColumnNames(Source), {}, 0,
                       (a,b)=>Number.From(b[Post] <> a[Post] or b[Chng.1] >= a[Chng.2]))
in
    group

enter image description here

否则(范围是相交的),请尝试以下代码:

let
    Source = Excel.CurrentWorkbook(){[Name="Table"]}[Content],
    cols = {"Post", "Chng.1", "Chng.2"},
    sort = Table.Sort(Source, List.Transform(cols, each {_, 0})),
    group = Table.Group(sort, cols,
                       {{"Chng.1_new", each List.Min([Chng.1])}, 
                        {"Chng.2_new", each List.Max([Chng.2])}}, 0,
                       (a,b)=>Number.From(b[Post] <> a[Post] or b[Chng.1] >= a[Chng.2])),
    add = Table.AddColumn(group, "Length", each ([Chng.2_new] - [Chng.1_new])*1000), //multiplication by 1000 is optional, depends on your decimal separator
    remove = Table.RemoveColumns(add, List.Skip(cols))
in
    remove
相关问题