Рассчитать значение, если вне диапазона времени - PullRequest
0 голосов
/ 06 мая 2018

У меня есть проблема, когда мне нужно выяснить, есть ли у проекта значения за пределами диапазона дат начала и окончания.

Ниже приведено простое соотношение таблицы измерений, содержащей даты начала и окончания проектов. И таблица фактов, содержащая регистрацию времени.

enter image description here

В таблице ниже есть столбец «Внешний диапазон дат», в котором я хотел бы иметь значение true / false. например, если таблица Main2 содержит дату понедельник, 13 мая 2018 года. В столбце должно отображаться значение false.

enter image description here

Я пробовал что-то вроде

Outside Date Range = CALCULATE(SUM(Main2[Value]), FILTER(Main2, Main2[Time] < LOOKUPVALUE(Main[Start], Main[Project], ALL(Main2[Project]))))

Но не совсем уверен, как правильно подойти к отношениям между двумя таблицами.

1 Ответ

0 голосов
/ 07 мая 2018

Я бы предложил два подхода: вычисляемый столбец или мера.

Расчетный столбец:

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

...