Формула Вида

Тема в разделе "Lotus - Программирование", создана пользователем Gandliar, 16 ноя 2012.

  1. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    Подскажите пожалуйста, как лотус использует формулу отбора для построения вида

    например у меня есть вид с формулой

    SELECT form="a" & p="1" & o="0"

    Если к примеру 90% документов имеют форму "a", 99% документов имеют p="1" и всего лишь 10% документов имеют o="0"

    будет ли быстрее строиться вид с формулой

    SELECT o="0" & form="a" & p="1"

    или с такой формулой

    SELECT @if(o="0"; @if(form="a"; @if(p="1"; @true; @false); @false); @false)

    или разницы нет.

    Заранее благодарю.
     
  2. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    ммм, если логически:
    SELECT o="0" - отберет сначала все документы в базе, где есть такое.
    & form="a" - отберет из отобранного те, у которых данная форма.
    & p="1" - еще менее сузит поиск.

    Но формула отбора работает целиком для каждого документа и возвращает True или False.
    Так что... Даже если и работает согласно логике, то можно заметить на больших объемах только.
    Можно поэкспериментировать, но думаю результат предсказуем.
     
  3. Gandliar

    Gandliar Well-Known Member

    Регистрация:
    16 фев 2004
    Сообщения:
    222
    Симпатии:
    0
    накопал на сайте ibm

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

    Form = "Report" & ( Sections = "Financials" | Total > 10000)


    сначала проверяет, является ли форма отчетом, и только при истинности этого утверждения проверяет остальную часть выражения. В макроязыках (и в LotusScript) логические операторы так не работают. Всегда вычисляются обе части выражения. Поэтому, если вычисление второй части требует больших затрат, возможно лучше будет выполнить свою собственную формулу с "ленивой логикой" следующим образом:

    @If(Form = "Report"; Sections = "Financials" | Total > 10000; @False)


    Функция @If выполняется дольше, чем оператор &, но если можно использовать ее, чтобы избежать ненужного вычисления каких-либо затратных функций, вы выиграете в конечном итоге.


    ============================

    Вот как бы точно проверить скорость.


    и ускорит ли обязательное включение формы в формулу отбора в случае если включена птичка на базе optimize document table map
     
  4. savl

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.052
    Симпатии:
    146
    Вот я тоже это видел, затем увидел, что формула вида работает для каждого документа.
    раздел 6.3.2
    Но да, там не сказано, что она выполняется полностью вся. Так что только эксперементы.
    Сомнительно, что можно получить выйгрыш на клиенте, а вот для сервера возможно выйгрыш будет.
     
Загрузка...

Поделиться этой страницей