Funções
Funções de string
Ao trabalhar com strings em expressões, é importante usar aspas simples (’’) para incluir strings literais. No entanto, há uma exceção quando você quer incluir aspas simples dentro de uma string literal. Nesses casos, você pode usar aspas duplas ("") para envolver toda a string.
Por exemplo:
- Correto: if(${yesno} = 1, “a string with ‘single quotes’ in it”, “no single quotes here”)
- Incorreto: if(${yesno} = 1, ‘a string with ‘single quotes’ in it’, ’no single quotes here’)
Em relação às aspas inteligentes, é crucial estar ciente de sua presença, pois elas podem causar problemas em expressões. Muitos editores de texto rico convertem automaticamente aspas retas ("" ou ‘’) em aspas inteligentes ou curvas ("" ou ‘’), o que pode resultar em erros de sintaxe ou comportamento inesperado. Para evitar isso, certifique-se de usar aspas retas (’’) de forma consistente em suas expressões.
O rtSurvey suporta várias funções, incluindo:
string(field): Converte um campo para uma string.- Exemplo:
string(34.8)será convertido para'34.8'.
- Exemplo:
string-length(field): Retorna o comprimento de um campo string.- Exemplo:
string-length(.) > 3 and string-length(.) < 10pode ser usado para garantir que o campo atual tenha entre 3 e 10 caracteres.
- Exemplo:
substr(fieldorstring, startindex, endindex): Retorna uma substring começando emstartindexe terminando logo antes deendindex. Os índices começam em 0 para o primeiro caractere da string.- Exemplo:
substr(${phone}, 0, 3)retornará os três primeiros dígitos de um número de telefone.
- Exemplo:
concat(a, b, c, ...): Concatena campos (e/ou strings) juntos.- Exemplo:
concat(${firstname}, ' ', ${lastname})retornará um nome completo combinando os valores nos camposfirstnameelastname.
- Exemplo:
linebreak(): Retorna um caractere de quebra de linha.- Exemplo:
concat(${field1}, linebreak(), ${field2}, linebreak(), ${field3})retornará uma lista de três valores de campo com quebras de linha entre eles.
- Exemplo:
lower(): Converte uma string para todos os caracteres minúsculos.- Exemplo:
lower('Street Name')retornará “street name”.
- Exemplo:
upper(): Converte uma string para todos os caracteres maiúsculos.- Exemplo:
upper('Street Name')retornará “STREET NAME”.
- Exemplo:
Funções select_one e select_multiple
count-selected(field): Retorna o número de itens selecionados em um campo select_multiple.- Exemplo:
count-selected(.) = 3pode ser usado como expressão de restrição para garantir que exatamente três opções sejam selecionadas.
- Exemplo:
selected(field, value): Retorna verdadeiro ou falso dependendo se o valor especificado foi selecionado no campo select_one ou select_multiple.- Exemplo:
selected(${color}, 'Blue')pode ser usado como expressão de relevância para mostrar um grupo ou campo somente se o respondente selecionou “Blue” como sua cor favorita. - Nota: O segundo parâmetro deve sempre especificar o valor da opção, não o rótulo da opção. Use o valor da coluna value na planilha de opções da definição do formulário.
- Exemplo:
selected-at(field, number): Retorna o item selecionado na posição especificada em um campo select_multiple. Quando o número passado é 0, retorna o primeiro item selecionado; quando o número é 1, retorna o segundo item selecionado, e assim por diante.- Exemplo:
selected-at(${fruits}, 0) = 'Apple'pode ser usado como expressão de relevância para mostrar um grupo ou campo somente se a primeira opção selecionada for “Apple”. - Nota: O valor retornado será o valor da opção, não o rótulo. Use o valor da coluna value na planilha de opções da definição do formulário.
- Exemplo:
choice-label(field, value): Retorna o rótulo para uma opção de campo select_one ou select_multiple, conforme definido na planilha de opções da definição do formulário.- Exemplo 1:
choice-label(${country}, ${country})retornará o rótulo da opção para a opção atualmente selecionada no campo chamadocountry. - Exemplo 2:
choice-label(${languages}, selected-at(${languages}, 0))retornará o rótulo para a primeira opção selecionada no campo chamadolanguages. - Nota: Esta função recupera o rótulo da opção, não o valor. Ela usa a coluna label da planilha de opções da definição do formulário.
- Exemplo 1:
Funções de campo repetido
No rtSurvey, se você quiser fazer a(s) mesma(s) pergunta(s) várias vezes, pode colocar um campo dentro de um grupo de repetição. Isso resulta em múltiplas instâncias do mesmo campo. As seguintes funções podem ajudar a lidar com esses campos repetidos e os dados repetidos que eles produzem. Consulte o tópico de ajuda sobre campos repetidos para mais detalhes.
join(string, repeatedfield): Para um campo dentro de um grupo de repetição, gera uma lista separada por string dos valores. O primeiro parâmetro especifica o delimitador a usar para separar os valores.- Exemplo:
join(', ', ${member_name})gerará uma lista única separada por vírgulas de todos os nomes inseridos.
- Exemplo:
join-if(string, repeatedfield, expression): Funciona exatamente comojoin(), exceto que verifica cada instância no grupo de repetição usando a expressão fornecida. Se a expressão for avaliada como falsa, o item será omitido da saída.- Exemplo:
join-if(', ', ${member_name}, ${age} >= 18)gerará uma lista separada por vírgulas de nomes apenas dos membros adultos (aqueles com idades de 18 anos ou mais).
- Exemplo:
count(repeatgroup): Retorna o número atual de vezes que um grupo de repetição se repetiu.- Exemplo:
count(${groupname})retornará o número de instâncias do grupo.
- Exemplo:
count-if(repeatgroup, expression): Funciona exatamente comocount(), exceto que verifica cada instância no grupo de repetição usando a expressão fornecida. Se a expressão for avaliada como falsa, o item será omitido da saída.- Exemplo:
count-if(${members}, ${age} >= 18)retornará a contagem de membros adultos com base no campo age dentro do grupo de repetição “members”.
- Exemplo:
sum(repeatedfield): Para um campo dentro de um grupo de repetição, calcula a soma de todos os valores.- Exemplo:
sum(${loan_amount})retornará o valor total de todos os empréstimos.
- Exemplo:
sum-if(repeatedfield, expression): Funciona exatamente comosum(), exceto que verifica cada instância no grupo de repetição usando a expressão fornecida. Se a expressão for avaliada como falsa, o item será omitido da saída.- Exemplo:
sum-if(${loan_amount}, ${loan_amount} > 500)retornará o valor total de todos os empréstimos acima de 500. Empréstimos menores serão ignorados.
- Exemplo:
min(repeatedfield): Para um campo dentro de um grupo de repetição, calcula o mínimo de todos os valores.- Exemplo:
min(${member_age})retornará a idade do membro mais jovem do grupo.
- Exemplo:
min-if(repeatedfield, expression): Funciona exatamente comomin(), exceto que verifica cada instância no grupo de repetição usando a expressão fornecida. Se a expressão for avaliada como falsa, o item será omitido da saída.- Exemplo:
min-if(${member_age}, ${member_age} >= 18)retornará a idade do adulto mais jovem do grupo. Aqueles com menos de 18 serão ignorados.
- Exemplo:
max(repeatedfield): Para um campo dentro de um grupo de repetição, calcula o máximo de todos os valores.- Exemplo:
max(${member_age})retornará a idade do membro mais velho do grupo.
- Exemplo:
max-if(repeatedfield, expression): Funciona exatamente comomax(), exceto que verifica cada instância no grupo de repetição usando a expressão fornecida. Se a expressão for avaliada como falsa, o item será omitido da saída.- Exemplo:
max-if(${member_age}, ${member_age} >= 18)retornará a idade do adulto mais velho do grupo. Aqueles com menos de 18 serão ignorados.
- Exemplo:
index(): Chamado dentro de um grupo de repetição, retorna o número de índice para o grupo ou instância atual.- Exemplo:
index()quando usado dentro de um grupo de repetição retornará 1 para a primeira instância, 2 para a segunda, e assim por diante.
- Exemplo:
indexed-repeat(repeatedfield, repeatgroup, index): Referencia um campo ou grupo que está dentro de um grupo de repetição de fora desse grupo de repetição. O primeiro parâmetro especifica o campo ou grupo repetido de interesse, o segundo especifica o grupo de repetição dentro do qual o campo ou grupo está localizado, e o terceiro especifica o número da instância dentro do grupo de repetição a usar.- Exemplo 1:
indexed-repeat(${name}, ${names}, 1)retornará o primeiro nome disponível quando o campo name estiver dentro de um grupo de repetição anterior chamado “names”. - Exemplo 2:
indexed-repeat(${name}, ${names}, index())obterá o nome correspondente ao número de instância do grupo de repetição atual.
- Exemplo 1:
rank-index(index, repeatedfield): Esta função calcula a classificação ordinal da instância especificada de um campo repetido para uso fora do grupo de repetição. A classificação 1 é atribuída à instância com o valor mais alto, a classificação 2 à instância com o próximo valor mais alto, e assim por diante. Se você passar um índice inválido ou um índice para uma instância com um valor não numérico, uma classificação de 999 será retornada.- Exemplo:
rank-index(1, ${random_draw})calcula a classificação da primeira instância com base no valor de seu camporandom_drawcomparado aos valores de outras instâncias.
- Exemplo:
rank-index-if(index, repeatedfield, expression): Esta função funciona de forma semelhante arank-index(), mas verifica cada instância no grupo de repetição do campo repetido usando a expressão fornecida. Se a expressão for avaliada como falsa, o item será omitido do cálculo. O índice usado é baseado no conjunto completo de instâncias antes de avaliar a expressão para cada instância. Se você passar um índice para uma instância que foi ignorada por não satisfazer a expressão, ele é considerado um índice inválido e uma classificação de 999 será retornada.- Exemplo:
rank-index-if(1, ${age}, ${age} >= 18)calcula a classificação de idade dentro do conjunto de adultos, considerando apenas as instâncias onde a idade é maior ou igual a 18.
- Exemplo:
Funções numéricas
| Operador | Operação | Exemplo | Resposta de exemplo |
|---|---|---|---|
+ | Adição | 1 + 1 | 2 |
- | Subtração | 3 - 2 | 1 |
* | Multiplicação | 3 * 2 | 6 |
div | Divisão | 10 div 2 | 5 |
mod | Módulo | 9 mod 2 | 1 |
O rtSurvey suporta funções numéricas, incluindo:
number(field): Converte o valor do campo para um número.- Exemplo:
number('34.8')= 34.8
- Exemplo:
int(field): Converte o valor do campo para um inteiro.- Exemplo:
int('39.2')= 39
- Exemplo:
min(field1, ..., fieldx): Retorna o valor mínimo entre os campos passados.- Exemplo:
min(${father_age}, ${mother_age})retornará a idade do pai ou da mãe, a que for menor.
- Exemplo:
max(field1, ..., fieldx): Retorna o valor máximo entre os campos passados.- Exemplo:
max(${father_age}, ${mother_age})retornará a idade do pai ou da mãe, a que for maior.
- Exemplo:
format-number(field): Formata o valor de um campo inteiro ou decimal de acordo com as configurações de localidade do usuário.- Exemplo:
format-number(${income})Esta expressão pode formatar “120000” como “120.000”.
- Exemplo:
round(field, digits): Arredonda o valor do campo numérico para o número especificado de dígitos após a vírgula decimal.- Exemplo:
round(${interest_rate}, 2)
- Exemplo:
abs(number): Retorna o valor absoluto de um número.pow(base, exponent): Retorna o valor do primeiro parâmetro elevado à potência do segundo parâmetro.- Cada parâmetro pode ser um campo, número ou expressão.
log10(fieldorvalue): Retorna o logaritmo de base dez do campo ou valor passado.sin(fieldorvalue): Retorna o seno do campo ou valor passado, expresso em radianos.cos(fieldorvalue): Retorna o cosseno do campo ou valor passado, expresso em radianos.tan(fieldorvalue): Retorna a tangente do campo ou valor passado, expresso em radianos.asin(fieldorvalue): Retorna o arco seno do campo ou valor passado, expresso em radianos.acos(fieldorvalue): Retorna o arco cosseno do campo ou valor passado, expresso em radianos.atan(fieldorvalue): Retorna o arco tangente do campo ou valor passado, expresso em radianos.atan2(x, y): Retorna o ângulo em radianos subtendido na origem pelo ponto com coordenadas (x, y) e o eixo x positivo. O resultado está no intervalo de -pi() a pi().sqrt(fieldorvalue): Retorna a raiz quadrada não negativa do campo ou valor passado.exp(x): Retorna o valor de e^x.pi(): Retorna o valor de pi.
Funções de data e hora
Os valores de data no rtSurvey são armazenados como strings no formato YYYY-MM-DD. Os valores de datetime são armazenados como strings ISO 8601 (YYYY-MM-DDTHH:MM:SS). Use decimal-date-time() para converter para um número para aritmética (por exemplo, calcular durações).
today(): Retorna a data de hoje como uma string no formatoYYYY-MM-DD. Avaliado uma vez quando o formulário abre.- Exemplo:
today()→'2024-03-15' - Uso comum: coluna
defaultpara pré-preencher a data de hoje, ou emrelevant/constraintpara comparar com um campo de data.
- Exemplo:
now(): Retorna a data e hora atuais como uma string ISO 8601. Avaliado cada vez que a expressão é computada.- Exemplo:
now()→'2024-03-15T14:32:00.000+03:00' - Uso comum: Registrar o registro de data/hora exato de um evento específico durante a pesquisa.
- Exemplo:
date(value): Converte um valor (string ou número) para uma string de data. Útil para converter valores calculados em um tipo de data.- Exemplo:
date('2024-03-15')→'2024-03-15'
- Exemplo:
date-time(value): Converte um valor para uma string de datetime.- Exemplo:
date-time(${event_timestamp})
- Exemplo:
decimal-date-time(value): Converte uma string de data ou datetime para um número decimal representando milissegundos desde o epoch Unix dividido por 86400000 (ou seja, dias fracionários desde 1970-01-01). Use isso para realizar aritmética em datas.- Exemplo: Duração em dias entre duas datas:
decimal-date-time(${end_date}) - decimal-date-time(${start_date}) - Exemplo: Duração em minutos entre dois datetimes:
(decimal-date-time(${end_time}) - decimal-date-time(${start_time})) * 1440
- Exemplo: Duração em dias entre duas datas:
format-date(date, format): Formata um valor de data usando uma string de padrão.- Tokens de formato:
%Y(ano com 4 dígitos),%y(ano com 2 dígitos),%m(mês 01–12),%d(dia 01–31),%a(dia da semana abreviado),%b(nome do mês abreviado) - Exemplo:
format-date(today(), '%d/%m/%Y')→'15/03/2024' - Exemplo:
format-date(${dob}, '%B %d, %Y')→'March 15, 1990'
- Tokens de formato:
format-date-time(datetime, format): Formata um valor de datetime usando uma string de padrão. Aceita todos os tokens deformat-datemais:%H(hora 00–23),%h(hora 01–12),%M(minutos 00–59),%S(segundos 00–59),%3(milissegundos),%P(AM/PM)- Exemplo:
format-date-time(now(), '%d/%m/%Y %H:%M')→'15/03/2024 14:32' - Exemplo:
format-date-time(${event_time}, '%I:%M %p')→'02:32 PM'
Funções booleanas
boolean(value): Converte qualquer valor para um booleano. Retornatruepara strings não vazias, números não zero etrue; retornafalsepara strings vazias,0efalse.- Exemplo:
boolean(${name})retornatruesenamenão estiver vazio.
- Exemplo:
boolean-from-string(string): Retornatruese a string for'1'ou'true'(sem distinção de maiúsculas/minúsculas); retornafalsecaso contrário.- Exemplo:
boolean-from-string(${enabled_flag})— útil quando um campo armazena'true'/'false'como texto.
- Exemplo:
true(): Retorna o valor booleanotrue.- Exemplo: Na coluna
required,true()é equivalente ayes.
- Exemplo: Na coluna
false(): Retorna o valor booleanofalse.- Exemplo:
if(${skip_section} = 'yes', false(), true())— definir dinamicamente o campo como obrigatório.
- Exemplo:
not(expression): Retorna a negação lógica da expressão. Retornatruese a expressão for falsa, e vice-versa.- Exemplo:
not(${consent} = 'yes')— mostrar um aviso quando o consentimento NÃO foi dado. - Exemplo:
not(selected(${issues}, 'none'))— exigir detalhes apenas se “nenhum” não foi selecionado.
- Exemplo:
Funções de string adicionais
starts-with(string, prefix): Retornatruesestringcomeçar comprefix.- Exemplo:
starts-with(${phone}, '+254')verifica se o número de telefone começa com o código do país do Quênia.
- Exemplo:
contains(string, substring): Retornatruesestringcontiversubstring.- Exemplo:
contains(${email}, '@')verifica se um endereço de e-mail tem um sinal@. - Exemplo:
contains(${notes}, 'urgent')aciona uma pergunta de acompanhamento se as notas mencionarem “urgent”.
- Exemplo:
substring-before(string, needle): Retorna a parte destringque aparece antes da primeira ocorrência deneedle.- Exemplo:
substring-before(${full_name}, ' ')extrai a primeira palavra (primeiro nome).
- Exemplo:
substring-after(string, needle): Retorna a parte destringque aparece após a primeira ocorrência deneedle.- Exemplo:
substring-after(${email}, '@')extrai a parte de domínio de um endereço de e-mail.
- Exemplo:
normalize-space(string): Remove espaços em branco iniciais e finais e recolhe todas as sequências internas de espaços para um único espaço.- Exemplo:
normalize-space(${name})— limpa um nome que pode ter sido digitado com espaços extras.
- Exemplo:
translate(string, search_chars, replace_chars): Substitui cada caractere emstringque aparece emsearch_charspelo caractere correspondente emreplace_chars. Caracteres emsearch_charssem caractere correspondente emreplace_charssão excluídos.- Exemplo:
translate(${code}, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')converte para maiúsculas (equivalente aupper()). - Exemplo:
translate(${phone}, ' -()', '')remove espaços, traços e parênteses de um número de telefone.
- Exemplo:
Funções matemáticas adicionais
floor(number): Retorna o maior inteiro menor ou igual anumber(arredonda em direção ao infinito negativo).- Exemplo:
floor(4.9)= 4,floor(-2.1)= -3
- Exemplo:
ceiling(number): Retorna o menor inteiro maior ou igual anumber(arredonda em direção ao infinito positivo).- Exemplo:
ceiling(4.1)= 5,ceiling(-2.9)= -2
- Exemplo:
random(): Retorna um número decimal aleatório entre 0,0 (inclusive) e 1,0 (exclusivo). Tipicamente usado em camposcalculatepara atribuir valores aleatórios ou randomizar a ordem das perguntas.- Exemplo:
random()→ por exemplo,0.7341 - Exemplo:
int(random() * 6) + 1→ número aleatório de 1 a 6 (jogada de dado)
- Exemplo:
coalesce(a, b): Retornaaseanão estiver vazio; caso contrário, retornab. Útil como fallback quando um campo pode estar vazio.- Exemplo:
coalesce(${preferred_name}, ${full_name})— usa o nome preferido se definido, caso contrário usa o nome completo.
- Exemplo:
once(value): Avaliavaluee o armazena, mas apenas se o campo atual estiver vazio. Se o campo já tiver um valor (por exemplo, foi definido anteriormente),once()retorna o valor existente sem alteração. Isso evita que o recálculo sobrescreva a entrada do usuário.- Exemplo:
once(today())na colunadefaultdefine a data de hoje uma vez e não é atualizado se o entrevistador reabrir o formulário. - Exemplo:
once(uuid())gera um UUID uma vez e o mantém estável em reedições.
- Exemplo:
Funções geográficas
area(geoshape_value): Calcula a área em metros quadrados delimitada por um valor geoshape (polígono).- O parâmetro é um valor de campo geoshape no formato
lat1 lon1 0 0; lat2 lon2 0 0; ... - Exemplo:
area(${field_boundary})— calcular a área de um campo pesquisado em m². - Exemplo:
round(area(${field_boundary}) div 10000, 2)— converter para hectares.
- O parâmetro é um valor de campo geoshape no formato
distance(coordinates): Calcula o comprimento total do caminho em metros de um geotrace (linha), ou a distância entre dois geopoints.- Para um geotrace:
distance(${route})retorna o comprimento total do caminho em metros. - Para dois geopoints:
distance(concat(${point_a}, ' ', ${point_b}))retorna a distância entre eles. - Exemplo:
round(distance(${road_trace}) div 1000, 3)— comprimento da estrada em quilômetros.
- Para um geotrace:
Funções de validação
regex(value, pattern): Retornatruesevaluecorresponder à expressão regularpattern. Use na colunaconstraintpara validação baseada em padrão.- O padrão usa sintaxe regex padrão (subconjunto POSIX ERE).
- Exemplo:
regex(., '^[0-9]{10}$')— validar um número de 10 dígitos. - Exemplo:
regex(., '^[A-Z]{2}[0-9]{6}$')— validar o formato de um número de passaporte (2 letras maiúsculas seguidas de 6 dígitos). - Exemplo:
regex(., '^[^@]+@[^@]+\.[^@]{2,}$')— verificação básica do formato de e-mail.
checklist(min, max, v1, v2, ...): Avalia uma lista de expressões booleanas e retornatruese o número de valorestrueestiver entreminemax(inclusive). Passe-1paraminoumaxpara ignorar esse limite.- Exemplo:
checklist(2, 3, ${q1} = 'yes', ${q2} = 'yes', ${q3} = 'yes')— passa se exatamente 2 ou 3 das três condições forem verdadeiras. - Exemplo:
checklist(1, -1, ${smoke_alarm}, ${fire_ext}, ${emergency_plan})— pelo menos uma medida de segurança deve ser verdadeira.
- Exemplo:
weighted-checklist(min, max, v1, w1, v2, w2, ...): Comochecklist(), mas cada valor tem um peso. A soma dos pesos para valorestruedeve estar entreminemax.- Exemplo:
weighted-checklist(10, -1, ${has_toilet}, 4, ${has_sink}, 3, ${has_shower}, 5)— a soma dos pesos para instalações presentes deve ser pelo menos 10.
- Exemplo:
Funções utilitárias
uuid(): Gera um UUID aleatório (formato RFC 4122 v4) como uma string.- Exemplo:
uuid()→'a3f8b2c1-4d5e-6f7a-8b9c-0d1e2f3a4b5c' - Tipicamente usado com
once()para gerar um ID único estável:once(uuid())
- Exemplo:
version(): Retorna o valor do atributoversiondo formulário conforme definido na planilha de configurações.- Exemplo:
version()→'3.1' - Útil em campos
calculatepara incorporar a versão do formulário nos dados exportados.
- Exemplo:
position(): Quando chamado dentro de um grupo de repetição, retorna o índice base 1 da instância de repetição atual.- Exemplo:
position()na primeira instância retorna1, na segunda retorna2, e assim por diante. - Veja também:
index()(alias),indexed-repeat()para referenciar valores de repetição de fora do grupo.
- Exemplo:
thousandsep(length, separator, value): Formata um número com um separador de milhares.lengthé o comprimento total mínimo da string (preenchido com espaços se menor),separatoré o caractere a usar (por exemplo,','), evalueé o número a formatar.- Exemplo:
thousandsep(0, ',', 1234567)→'1,234,567' - Exemplo:
thousandsep(0, '.', ${income})→ formata a renda com ponto como separador de milhares.
- Exemplo:
substr-jsonpath(value, jsonpath): Extrai uma substring de uma string JSON usando uma expressão JSONPath.- Exemplo:
substr-jsonpath(${api_response}, '$.data.name')— extrai o camponamede uma string JSON armazenada emapi_response. - Tipicamente usado junto com
callapi()para extrair valores específicos das respostas da API.
- Exemplo: