Я бы предложил два подхода: вычисляемый столбец или мера.
Расчетный столбец:
Outside Date Range =
VAR rowsOutsideRange =
CALCULATE (
COUNTROWS ( Main2 ),
FILTER (
RELATEDTABLE ( Main2 ),
Main2[Time] < Main[Start]
|| Main2[Time] > Main[Finish]
)
)
RETURN
IF ( rowsOutsideRange > 0, TRUE (), FALSE () )
Вы были довольно близки в своем решении! Поскольку у вас есть связь между двумя таблицами, RELATEDTABLE
будет возвращать только связанные строки, что устраняет необходимость в LOOKUPVALUE()
. Кроме того, достаточно подсчитать количество строк, так как мы хотим знать, существуют ли какие-либо строки за пределами диапазона, а не сколько.
Вы также можете создать меру:
Outside Date Range Measure :=
VAR rowsOutsideRange =
CALCULATE (
COUNTROWS ( Main2 ),
FILTER (
Main2,
Main2[Time] < MIN ( Main[Start] )
|| Main2[Time] > MAX ( Main[Finish] )
)
)
RETURN
IF ( rowsOutsideRange > 0, TRUE (), FALSE () )
Что очень похоже на вычисляемый столбец, только нам нужно объединить даты начала и окончания. Сама по себе эта мера не имеет никакого значения, она должна быть разрезана проектом, чтобы быть корректной. Если вы действительно хотите, чтобы вы могли использовать конструкцию типа SUMX()
, чтобы создать общий оператор TRUE / FALSE, который сообщает вам, есть ли у какого-либо проекта строки за пределами их диапазонов, но для вашего случая использования я не вижу преимущества что.
Выбор между вычисляемым столбцом и мерой зависит от четкости кода и использования ресурсов. Вычисленная мера использует больше памяти, а мера использует больше ЦП.
Глядя на ваш случай, я бы выбрал вычисляемый столбец, который представляется наиболее простым и понятным решением.
Надеюсь, это поможет!
Jan