Функция переключения не возвращает правильное значение при обращении к «ничему» - PullRequest
0 голосов
/ 16 апреля 2019

здесь есть небольшая проблема.

У меня есть функция Switch в отчете, как показано ниже:

=Switch(

    Fields!Duration.Value > 0, Round(Fields!Duration.Value / 60),

    Fields!LastTime.Value = nothing, "Still Occupied",

    Fields!LastTime.Value = Fields!FirstTime.Value, "Passing By"

)

Это для столбца, который показывает общее «Поля! Длительность. Значение» в минутах (округлено в большую сторону), и он работает, кроме второй строки:

Если значение Last Time совпадает со значением First Time, то предполагается, что объект просто проходил мимо, и выводит «Passing By», и это делает это правильно.

Однако, если значение Last Time равно нулю (в столбце «Last Time» определено, что если это IsNothing, то это «none», и в этом отчете оно должно выводиться с «Still Occupied») - что он не делает. Ячейка оставлена ​​пустой, как будто у меня это написано как Fields!LastTime.Value = nothing, nothing,

Почему эта строка кода не работает?

    Fields!LastTime.Value = nothing, "Still Occupied",

Спасибо

Ответы [ 3 ]

3 голосов
/ 17 апреля 2019

Вы не можете проверить ничего, используя оператор =.Есть два способа, с помощью которых Ничто не может быть проверено;используя функцию проверки IsNothing, подобную этой IsNothing(Fields!LastTime.Value) = True, или используя оператор Is, подобный этому Fields!LastTime.Value Is Nothing.

Если эти тесты не дают ожидаемого результата, возможно, вы имеете дело с полем, для которого установлено что-токроме NULL, как пустое '' или произвольное значение.Вы можете открыть конструктор запросов в свойствах своего набора данных, чтобы выполнить запрос и проверить результаты.

Возможно, вы также искали неправильное отображение в своем наборе данных.Используйте кнопку «Обновить поля» в свойствах набора данных, чтобы проверить сопоставления полей, а затем дважды проверьте, совпадает ли имя, используемое в выражении.

0 голосов
/ 17 апреля 2019

Я обнаружил, что использование оператора IIF вместо оператора Switch работает для меня, по крайней мере, для этого конкретного случая:

=IIF(Fields!Duration.Value > 0, Round(Fields!Duration.Value / 60),
IIF(Fields!LastTime.Value = Fields!FirstTime.Value, "Passing by", "Still Occupied"))

Попытка объяснить это для будущих людей, которые могут не понять (например, меня, когда я в конце концов забуду это - я очень новичок в такого рода вещах) -

Вместо того, чтобы использовать оператор Switch, который был у меня на месте, чтобы увидеть, является ли Fields!LastTime.Value число , равно полям! FirstTime.Value, или ничто , теперь он просто спрашивает, является ли это число или равно ли оно Fields!FirstTime.Value, и если ни один из них не является истинным, он помечает его как «Все еще занят», устраняя тем самым необходимость ссылка nothing целиком. Как я уже сказал, это довольно конкретный случай, но вы никогда не знаете.

Спасибо за помощь @JamieSee и @SuperSimmer 44. Ура!

0 голосов
/ 17 апреля 2019

Может быть, ничто не должно быть окружено ""

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...