Обзор
При использовании отчётов неизбежно применение функций и выражений для расчёта некоторых данных. В UReport2 поддерживается написание выражений во многих местах. Как правило, мы можем изменить тип ячейки на «выражение», а затем ввести соответствующее выражение и функцию в редакторе выражений ниже. Кроме того, в UReport2 мы также можем использовать выражения в условиях, источниках изображений и источниках данных QR-кода и т. д. Сложные утверждения и отчёты можно подготовить только после изучения и освоения выражений, предоставляемых в UReport2.
Базовый синтаксис
Как и в общих языках программирования, выражения в UReport2 имеют некоторые базовые типы данных, такие как число и строка и т.д., как показано в таблице ниже:
Тип выражения | Описание | Пример |
---|---|---|
Число | Может быть целым или десятичным | 1, 123 и 0,121331 являются допустимыми числами |
Строка | Строка должна быть заключена в одинарные или двойные кавычки | 'ureport2', "UReport2" и 'UReport2 course' являются допустимыми строками |
Логическое значение | Логическое значение представляет Да или Нет | Есть два логических значения: 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 или). Часть после «?» — это выражение, возвращаемое после выполнения при выполнении условий. Часть после «:» — это выражение, возвращаемое после выполнения, когда условия не выполняются.
Примеры троичных выражений | Примечание |
---|---|
A1>1000 ? «нормальное значение» : «низкое значение» | Для вычисления выражения сначала получите значение ячейки A1 и определите, больше ли оно 1000. Если да, верните строку «нормальное значение», в противном случае верните строку «низкое значение». |
A1>1000 and A1<20000 ? «нормальное значение»: «скорректированное значение:"+(A1+100) | Для части условия определите, превышает ли значение A1 1000 и меньше 20 000. Если да, то верните «нормальное значение», иначе верните значение соединения строки «скорректированное значение» и значения A1 плюс 100. Если A1 равно 2 000, то вернём «скорректированное значение: 2100» |
Выражение if
Синтаксическая структура выражения if в UReport2 показана на рисунке ниже:
Согласно рисунку, выражение if состоит из части условного суждения if, суждения с несколькими альтернативными условиями elseif и, наконец, части альтернативных условий else. Синтаксическая структура аналогична java или javascript.
Примеры выражений if | Примечание |
---|---|
if(A1>1000){return «нормальное значение»} | Определите, превышает ли значение ячейки A1 |
| if (A1 > 1000) {return "normal value"} else {"low value"}; | Определяем, больше ли значение в ячейке A1 1000. Если да, возвращаем строку «нормальное значение». Иначе возвращаем строку «низкое значение». Стоит отметить, что в выражении if есть несколько вариантов ключевого слова return. Добавление ';' в конце строки также указывает на то, что это опционально. Этот дизайн в основном предназначен для соответствия привычкам в программах на Java и JavaScript.|
Если значение ячейки A1 больше 1000 и меньше 20 000 — вернуть строку «нормальное значение:» + A1, иначе если значение ячейки A больше 20 000 и меньше 40 000 — вернуть «высокое значение», иначе если значение ячейки A больше 20 000 и меньше 40 000 — вернуть «сверхвысокое значение», иначе вернуть «низкое значение».
В этом случае в части условий добавлено несколько комбинированных условий, а elseif требует множественных суждений.
Case expression — ещё одна форма условного суждения, предоставляемая 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 будут применяться. Результат показан на рисунке ниже: После того как ячейка B2 будет расширена, возьмите все ячейки C2 под B2. Отфильтруйте полученные значения ячеек C2 и возьмите только те ячейки C2, значение которых больше 1000, но меньше 10 000.
Рассмотрим конкретный пример. Шаблон отчёта представлен ниже:
A1 | B1 |
C1 | D1 |
В приведённом выше шаблоне отчёта мы вводим C1[A1:2,B1:1] в выражении ячейки B2, что означает взять значение соответствующей ячейки C1 в первой ячейке после расширения B1, которая находится во второй ячейке после того, как была расширена A1. Результат показан на следующем рисунке:
A1 | B1 |
C1 | D1 |
500 | 300 |
600 | 400 |
700 | |
800 | |
900 |
Конечно, мы можем подготовить кросс-таблицу и найти определённую ячейку, добавив координаты её левой и верхней родительской ячейки. Здесь это демонстрироваться не будет. В практических приложениях координаты ячеек могут использоваться в статистических отчётах на основе сравнения год к году или месяц к месяцу. Порядковый номер координат ячейки может быть отрицательным, чтобы предложить перемещение текущей ячейки для расчёта соотношений здесь.
Если нам нужно обратиться ко всем ячейкам, нам нужно только добавить «[» после имени ячейки. В случае A1[ ] это означает обратиться ко всем ячейкам A1 независимо от того, где находится указанная ячейка. Условия должны использоваться при обращении ко всем ячейкам, таким образом, чтобы реализовать условное ограничение на указанные ячейки. Например, A1[] {A1 > 1000 и A1 < 10000} означает обратиться ко всем ячейкам A1, но значение указанных ячеек A1 должно быть больше 1 000 и меньше 10 000.
Шаблон отчёта показан ниже:
A2 | B2 | C2 |
D2 | E2 | F2 |
В приведенном выше шаблоне отчета выражение в ячейке D2 — C2 - C2[A2:-1], что означает сначала взять значение ячейки C2 в ячейке D2, потому что ячейка C2 находится в той же строке, что и D2, и является единственной ячейкой, которую можно получить напрямую. Следующий C2 принимает координаты A2:-1, указывая взять ячейку C2, соответствующую ячейке A2, которая на одну ячейку выше относительно ячейки A2 относительно текущей ячейки (отрицательное значение предполагает движение вверх). Результат показан на следующем рисунке:
A2 | B2 | C2 |
D2 | E2 | F2 |
100 | 200 | 300 |
400 |
Здесь значение месяца к месяцу в первой строке равно 0, поскольку предыдущая строка не существует, так как ячейка D2 расположена в первой строке. В этом случае UReport2 по умолчанию принимает значение первой ячейки C2. Разница между двумя значениями равна 0.
Шаблон отчета показан ниже:
A3 | B3 | C3 |
D3 | E3 | F3 |
В указанном выше шаблоне ячейка D3 сначала получает значение ячейки C3 в той же строке, затем использует координаты ячейки, чтобы взять запись ячейки A3, расположенной над ячейкой A3, которая находится в одной строке с текущей ячейкой D3 (-1 указывает на перемещение вверх), а затем получает ячейку C3, соответствующую A3. Поскольку C3 имеет несколько значений, здесь добавлено условие B3==$B3. Первый B3 здесь представляет значение B3 в строке, соответствующей текущей ячейке, а $B3 указывает значение ячейки B3, соответствующее ячейке C3 после фиксации координат. Условие требует, чтобы два значения были равны друг другу, фактически требуется один и тот же месяц, таким образом реализуя нашу цель сравнения год к году. Результат показан ниже:
A3 | B3 | C3 |
D3 | E3 | F3 |
2022 | 2023 | 1000 |
2021 | 2022 | 2000 |
Для $B3 в UReport2 добавление $ перед именем ячейки означает принять значение ячейки относительно целевой ячейки, которое в основном используется в условиях. Например, в C2[A2:-1]{B2==$B2} выше, $B2 представляет значение ячейки B2, соответствующее ячейке C2, полученной.
В этом примере значения год к году во всех группах ниже 2 000 равны 0, потому что координаты A2:-1 не существуют в группе и их нельзя переместить вверх. Поэтому система по умолчанию берёт текущую запись, поэтому результаты вычислений оказываются равными 0. Если мы надеемся, что результат не покажет 0, мы можем добавить условное выражение условного суждения if. Если текущая ячейка находится в первой группе, введите пустую строку или значение после практического расчёта. Пересмотренный шаблон отчёта: Ниже представлено:
Содержание выражения, соответствующее ячейке D2, показано на следующем рисунке:
Эффект выполнения показан на следующем рисунке:
В приведённых выше примерах мы используем «выражение условия if». Конечно, мы также можем использовать «тернарное выражение» для суждения или «case» для суждения. В «выражении условия if» мы сначала судим, установлено ли &A2==1. В формуле A2 представляет последовательность относительно текущей расширенной ячейки A2. В UReport2 мы можем отметить последовательность расширенной ячейки способом «&имя ячейки». Следует отметить, что когда мы отмечаем последовательность расширенной целевой ячейки способом «&имя ячейки», текущая ячейка должна быть подячейкой или косвенной подячейкой целевой ячейки; например, в приведённых выше примерах ячейка, использующая &A2 — это D2, косвенная ячейка единицы A2. Таким образом, мы можем правильно получить значение последовательности расширенной единицы A2.
Что касается использования знака &. Когда используется «&имя ячейки» для обозначения последовательности целевой расширенной ячейки, помимо описанного выше уведомления, следует также отметить, что получение последовательностей будет основываться на их общей родительской ячейке. Если они имеют общую родительскую ячейку, последовательности должны быть упорядочены в соответствии с количеством целевых ячеек в родительской ячейке. Это было реализовано в предыдущем видео, представляющем модель расчёта отчёта, когда данные в подчинённой таблице упорядочиваются для создания подробных основных и подчинённых отчётов.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )