Нахождение перекрывающихся дат для разных идентификаторов - PullRequest
0 голосов
/ 11 марта 2020

Я написал следующий код Excel для вывода значений true или false в зависимости от того, существуют ли перекрывающиеся даты для идентификационного номера человека. Помогите мне перевести его в код для нового столбца в Power BI?

=SUMPRODUCT(($C4<=$D$2:$D$4392)*($D4>=$C$2:$C$4392)*($B4=$B$2:$B$4392))>1

Столбец B - это идентификаторы, Столбец C - это Дата начала, а Столбец D - Дата окончания - см. Также Пример

Мой лог c выглядит следующим образом.

В формуле есть три массива:

  • first - логическое значение, чтобы увидеть, если дата начала предшествует другим датам окончания,
  • second - логическое значение, чтобы увидеть, дата окончания предшествует другим датам начала, и
  • третий - чтобы убедиться, что это тот же идентификационный номер.

Они умножаются вместе в один массив, чтобы определить, сколько экземпляров всех булевых операторов являются истинными. SUMPRODUCT складывает значения этого массива вместе, и если он больше единицы, он перекрывается.

1 Ответ

0 голосов
/ 11 марта 2020

Этот вычисляемый столбец должен работать для вас.

Overlap? =
VAR StartDate = 'Table'[Start]
VAR EndDate = 'Table'[End]
RETURN
    CALCULATE (
        COUNTROWS ( 'Table' ),
        ALLEXCEPT ( 'Table', 'Table'[ID] ), 
        'Table'[Start] <= EndDate,
        'Table'[End] >= StartDate 
    ) > 1

Функция ALLEXCEPT отфильтрует таблицу по строкам, которые имеют тот же идентификатор, что и текущая строка (фактически удаляет все фильтры, кроме фильтра в [ID]).

Функция CALCULATE подсчитывает строки отфильтрованной таблицы, где [Start] <<, чем переменная EndDate, которая является значением End текущей строки, а [End] is> = чем переменная StartDate, которая является начальным значением текущей строки. Это всегда верно для текущей строки, но если результат больше 1, тогда есть перекрытия.

enter image description here

...