Диапазон PowerQuery в пределах диапазона - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь отфильтровать значения в определенном диапазоне значений в большом наборе данных. У меня есть небольшая выдержка из данных значений:

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 Ответ

1 голос
/ 18 октября 2019

Специально в вашем случае (последующий диапазон находится внутри предыдущего) вы можете использовать этот код:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...