При использовании отчетов неминуемо возникает необходимость применения функций и выражений для вычисления некоторых данных. В UReport2 запись выражений поддерживается в нескольких местах. Наиболее типично можно изменить тип ячейки на «выражение» и затем ввести соответствующее выражение и функцию в редактор выражений ниже. Кроме того, выражения также могут использоваться в условиях, источниках изображений и источниках данных для штрихкодов QR в UReport2. Сложные выражения и отчеты могут быть подготовлены после изучения и освоения выражений, предоставляемых UReport2.
Подобно общим языкам программирования, выражения в UReport2 имеют некоторые базовые типы данных, такие как число и строка, как показано в таблице ниже:
Тип выражения | Описание | Пример |
---|---|---|
Число | Может быть целым или десятичным числом | 1, 123 и 0.121331 — все это допустимые числа |
Строка | Строка должна заключаться в одинарные или двойные кавычки | 'ureport2', "UReport2" и 'UReport2 курс' — все это допустимые строки |
Логическое значение | Логическое значение представляет Да или Нет | Есть два логических значения: true и false |
Вышеуказанные три основных типа данных могут использоваться независимо или объединяться для выполнения комбинаторных вычислений путем соединения их с "+", "-", "*", "/", и "%", как показано в таблице ниже:
Операторы | Описание | Пример |
---|---|---|
+ | Вычисляет сумму двух чисел или соединяет две величины | 21+31 означает вычисление суммы этих двух чисел, и результат будет равен 52. "value:" + 331 означает соединение двух значений, и результат будет равен "value: 331" |
- | Вычисляет разницу между двумя числами | 21 - 31 указывает на вычисление разницы между этими двумя числами, и результат будет равен -10 |
* | Вычисляет произведение двух чисел | 3*6 даст результат 18 |
/ | Вычисляет деление двух чисел | 6/3 даст результат 2. Если одно число не делится на другое, то должно быть сохранено 8 знаков после запятой |
% | Вычисляет остаточное значение двух чисел | 5%3 даст результат 2; а 6%2 даст результат 0 |
UReport2 также предлагает несколько типов условных операторов сравнения. Первый из них — тройное выражение.
практически все языки поддерживают тройное выражение, которое является простым и позволяет делать условные суждения на основе минимального количества кода. Синтаксическая структура тройного выражения в UReport2 показана на рисунке ниже:
По рисунку видно, что первая часть относится к условию, которое может состоять из нескольких условий (соединенных с помощью and или or). Часть после "?" — это выражение, возвращаемое при выполнении условий. Часть после ":" — это выражение, возвращаемое при невыполнении условий.
Примеры тройного выражения | Примечание |
---|---|
A1 > 1000 ? "обычное значение" : "низкое значение" | Для вычисления выражения сначала получаем значение ячейки A1 и проверяем, превышает ли оно 1000. Если да, возвращается строка "обычное значение"; если нет, возвращается строка "низкое значение". |
A1 > 1000 && A1 < 20000 ? "обычное значение" : "исправленное значение:" + (A1 + 100) | Для условия проверяется, превышает ли значение A1 1000 и меньше 20000. Если да, возвращается строка "обычное значение", иначе возвращается значение соединения строки "исправленное значение" и значения A1 плюс 100. Если A1 равно 2000, то возвращается "исправленное значение: 2100" |
Синтаксическая структура условного выражения if в UReport2 показана на следующем рисунке:
По рисунку видно, что условное выражение состоит из части if условного выражения, части с несколькими альтернативными elseif условиями и, наконец, части альтернативного else условия. Синтаксическая структура аналогична Java или JavaScript.
Примеры условного выражения if | Примечание |
---|---|
if(A1 > 1000) { return "обычное значение" } | Проверяет, превышает ли значение ячейки A1 1000. Если да, возвращает строку "обычное значение"; если нет, ничего не происходит. |
if(A1 > 1000) { return "обычное значение" } else { "низкое значение" } | Проверяет, превышает ли значение ячейки A1 1000. Если да, возвращает строку "обычное значение", иначе возвращает строку "низкое значение". Важно отметить, что в выражении if доступны несколько вариантов ключевого слова return. Добавление ';' в конце строки также указывает на его выбор. Эта конструкция предоставляется главным образом для совместимости с привычками в Java и JavaScript. |
if(A1 > 1000 && A1 < 20000) { return "обычное значение:" + A1 } else if(A > 20000 && A1 < 40000) { return "высокое значение" } else if(A > 20000 && A1 < 40000) { return "ультрасовременное значение" } else { "низкое значение" } | В этом случае в части условий добавлены несколько объединённых условий, и elseif требует множественного сравнения. |
Условное выражение case является еще одной формой условного сравнения, предлагаемой UReport2. Это похоже на if-выражение, но проще. Его синтаксическая структура показана на следующем рисунке:
Условие case должно быть помещено в case {...}, за которым следует несколько условий и возвращаемое значение.
Примеры условного выражения case | Примечание |
---|---|
case {A1 == 100 return "обычное ", A1 > 100 && A1 < 1000 return "обычное значение", A1 > 100 && A1 < 1000 return 'высокое'} | Два условия имеют различные возвращаемые значения |
case {A1 == 100 return "обычное ", A1 > 100 && A1 < 1000 return "обычное значение", A1 > 100 && A1 < 1000 'высокое'} | В выражении case также есть несколько вариантов ключевого слова return. |
В настоящее время большинство вычислений в отчетах выполняются относительно ячеек или связаны с ячейками. Поскольку ячейки в отчетах обычно связаны с данными, а данные часто многоплановы, одна ячейка может иметь несколько значений после вычисления, что усложняет ссылку на ячейку. В UReport2 целевая ячейка, на которую ссылается, вычисляется относительно текущей ячейки. Имя ячейки можно напрямую включить в выражение для ссылки на ячейку. Например, при ссылке на ячейку A1 просто пишите A1 в выражении. Смотрите пример ниже:
Мы вводим выражение A1 в ячейку D1 в указанном выше рисунке, что означает заполнение ячейки D1 значением ячейки A1 относительно текущей ячейки D1. Тогда результат будет:
Поскольку D1 является подячейкой A1, данные, связанные с ячейкой A1, имеют секционную структуру. Исходя из положения текущей ячейки D1, достигается результат, представленный на указанном выше рисунке. Если ввести B1 в ячейку D1, результат будет:
Аналогично, если ввести выражение C1 в D1, каждая ячейка D1 будет заполнена значением ячейки C1, расположенной в той же строке, что и ячейка D1. Результат не представлен здесь.На основе вышеупомянутого примера, если ссылаться на целевую ячейку с помощью выражения в ячейке UReport2, первым шагом является проверка, находится ли целевая ячейка в той же строке или столбце, что и текущая ячейка. Если да, можно использовать значение целевой ячейки, расположенное в той же строке или столбце. Если текущая ячейка и целевая ячейка не находятся в одной и той же строке или столбце, ситуация будет другой. Посмотрим на ещё один пример.
В данном примере мы вводим B1 в выражение ячейки C2, чтобы указать ссылку на значение ячейки B1. Ячейки B1 и C2 не находятся в одной и той же строке или столбце, и ячейка B1 будет иметь несколько значений после расширения. Однако обе ячейки B1 и C2 имеют общего родителя A1 (левый родитель ячейки C2 — это B2, а левый родитель ячейки B2 — это A1, поэтому A1 является косвенным левым родителем ячейки C2), поэтому все значения B1 под общим родителем A1 будут применены. Результат представлен на следующем рисунке:
Результат нескольких значений: Если более одного значения получено в UReport2, эти значения должны быть разделены запятыми для вывода, как показано на указанном выше рисунке.
Принцип получения целевой ячейки: Как указано в вышеупомянутом примере, когда значение целевой ячейки получается через выражение в ячейке UReport2, первым шагом является проверка, находится ли целевая ячейка в той же строке или столбце, что и текущая ячейка. Если да, используется значение целевой ячейки, расположенное в той же строке или столбце. Если нет, используются все целевые ячейки, имеющие общего родителя с текущей ячейкой. Если они имеют общего верхнего родителя или общего левого родителя, используется целевая ячейка в пересечении между общим верхним родителем и общим левым родителем; если они не имеют общего родителя, то применяются все целевые ячейки после итерации.
Если мы введём C1 в указанной выше ячейке, результат будет отличаться. Так как C1 является верхним родителем C2, мы используем значение верхнего родителя, расположенного в той же колонке. Результат представлен на следующем рисунке:
. Возможны различные варианты для части условий. Смотрите пример ниже:| Примеры координат ячеек | Примечание | | :--------------------- | :--------- | | C1[A1:2,B1:1] | При поиске C1 сначала расширяется вторая ячейка после первой ячейки A1, затем первая ячейка после второй ячейки B1 в расширенной A1, а затем ищется ячейка C1, соответствующая ячейке B1. | | C2[A1:2,B1:2;C1:3] | При поиске C2 сначала расширяется вторая ячейка после первой ячейки A1, затем вторая ячейка после второй ячейки B2 в расширенной A1, затем левая подячейка C2 под расширенной второй ячейкой B2, затем третья ячейка после расширения C1, и наконец ищется ячейка C2 под ней и берётся пересечение ячеек C2. | | C2[A1:2,B2:2]{C2>1000} | Это значит взять вторую ячейку после расширения A2, затем взять вторую ячейку после расширения B2 под ячейкой выше, взять все ячейки C2 под B2, отфильтровать условия для полученной ячейки C2 и взять все ячейки C2, где значение C2 превышает 1000. | | C2[A1:2,B2:2]{C2>1000 and C2<10000} | Это значит взять вторую ячейку после расширения A2, затем взять вторую ячейку после расширения B2 под ячейкой выше, взять все ячейки C2 под B2, отфильтровать условия для полученной ячейки C2 и взять все ячейки C2, где значение C2 превышает 1000 но меньше 10000. |
Рассмотрим конкретный пример. Шаблон отчета представлен ниже:
В шаблоне отчета выше в выражении ячейки B2 мы вводим C1[A1:2,B1:1], что означает взять значение соответствующей ячейки C1 в первой ячейке после расширения B1, которая находится во второй ячейке после расширения A1, поэтому результат показан на следующем рисунке:
Конечно, можно подготовить таблицу со скрещиванием и найти определённую ячейку, добавив координаты её верхней и левой родительской ячейки. Это не будет подробно демонстрироваться здесь. В практических приложениях координаты ячеек могут использоваться в статистических заявлениях на год к году или месяц к месяцу. Номер координат ячеек может быть отрицательным, чтобы указать перемещение текущей ячейки, чтобы рассчитывать отношения здесь.
Если нам нужно обратиться ко всем ячейкам, достаточно добавить «[]» после имени ячейки. Например, A1[] означает обращение ко всем ячейкам A1, независимо от того, где они расположены. Условия используются при обращении ко всем ячейкам, чтобы реализовать условное ограничение на обращаемые ячейки. Например, A1[]{A1>1000 and A1<10000} означает обращение ко всем ячейкам A1, но значение всех обращаемых ячеек A1 должно быть больше 1000 и меньше 10000.
Шаблон отчета представлен ниже:
В шаблоне отчета выше выражение в ячейке D2 — это C2 - C2[A2:-1], что означает сначала взять значение ячейки C2 в ячейке D2, так как ячейка C2 расположена в той же строке с D2 и является единственной ячейкой, которую можно получить напрямую. Следующий C2 использует координаты A2:-1, что указывает на то, чтобы взять ячейку C2, соответствующую ячейке A2, которая находится на одну ячейку выше относительно текущей ячейки (отрицательное значение указывает на движение вверх). Результат показан на следующем рисунке:
В этом результате месячная разница в первой строке равна 0, потому что предыдущая строка не существует, так как ячейка D2 находится в первой строке. В этом случае UReport2 по умолчанию берёт значение первой ячейки C2. Разница между двумя значениями равна 0.
Шаблон отчета представлен ниже:
В шаблоне выше ячейка D2 сначала получает значение ячейки C2 в той же строке, затем использует координаты ячеек, чтобы взять запись ячейки A2, находящейся на одну ячейку выше относительно текущей ячейки D2 (-1 указывает на координаты движения вверх) и затем получает ячейку C2, соответствующую A2. Поскольку у C2 несколько значений, здесь добавлено условие B2 == $B2. Первое B2 здесь представляет собой значение B2 в строке, соответствующей текущей ячейке, а $B2 указывает на значение ячейки B2, соответствующее ячейке C2 после закрепления координат. Условие требует, чтобы два значения были равны друг другу, фактически требуя одного и того же месяца, чтобы реализовать нашу цель года к году. Результат показан ниже:
Для $B2 в UReport2 добавление $ перед именем ячейки означает получение значения ячейки относительно целевой ячейки, что обычно используется в условиях. Например, в C2[A2:-1]{B2 == $B2} выше $B2 представляет собой значение ячейки B2, соответствующее ячейке C2, полученное.
В вышеприведённом примере годовые значения в первой группе ниже 2000 равны 0, поскольку координаты A2:-1 не существуют в этой группе и не могут двигаться вверх. Поэтому система по умолчанию берёт текущую запись, поэтому все вычисления оказываются равными 0. Если мы хотим, чтобы результат не содержал 0, можем добавить условное выражение if. Если текущая ячейка находится в первой группе, ввести пустую строку, либо значение после практического вычисления. Отредактированный шаблон отчета представлен ниже:
Содержание выражения, соответствующее ячейке D2, показано на следующем рисунке:
Эффект выполнения показан на следующем рисунке:
В вышеприведённых примерах мы используем "выражение if". Конечно, мы также можем использовать "тернарное выражение" для проверки или "случай" для проверки. В "выражении if" мы сначала проверяем, установлено ли &A2 == 1. В формуле A2 представляет последовательность относительно текущей расширенной ячейки A2. В UReport2 мы можем пометить последовательность расширенной ячейки способом "& имя ячейки". Должно быть учтено, что когда мы помечаем последовательность расширенной цели ячейки способом "& имя ячейки", текущая ячейка должна быть подячейкой или косвенной подячейкой цели ячейки; например, в вышеприведённых примерах ячейка, использующая &A2, это D2, косвенная ячейка единицы A2. Таким образом, мы можем правильно получить последовательное значение расширенной единицы A2.
Относительно использования знака & Когда "& имя ячейки" используется для пометки последовательности расширенной цели ячейки, кроме упомянутого выше, следует отметить, что получение последовательностей основывается на их общем родительском элементе. Если они имеют одинакового родителя, последовательности располагаются согласно количеству целевых ячеек в родительской ячейке. Это было продемонстрировано в предыдущем видео, представляющем модель расчета отчета, когда данные в рабочей таблице сортируются для достижения детализированного главного и рабочего отчета.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )