# Table functions

**Table functions** (funções tabuladas) são ferramentas fundamentais do arsenal de qualquer desenvolvedor sério de modelos de dinâmica de sistemas. Elas representam tabelas de valores conhecidos, facilitando e direcionando a construção do modelo.

Considere, por exemplo, que a Startup está preocupada com o nível de engajamento dos seus usuários. Em apps semelhantes, o nível de engajamento é determinado pelo tempo médio que um usuário se mantém ativo. Para o app desenvolvido, estima-se que o tempo que o usuário fica ativo é definido pelo próprio número de usuários, isto é: quanto maior o tamanho da rede de usuários, maior o tempo médio que o usuário permanece ativo.&#x20;

Assim, o tempo médio de engajamento é estimado pela seguinte tabela:

O diagrama de estoque e fluxo deve ser modificado, como na figura a seguir, para representar a perda por desinteresse (fluxo "Pessoas desistindo do app") e o número de clientes inativos (estoque "Clientes inativos"). Estude as alterações realizadas no diagrama de estoque e fluxo do problema e veja se consegue compreendê-las.

![](https://lh6.googleusercontent.com/SD5yVq1nZHcX84qAhZjk6-2qU-vABOrLI9GpG5iwPgVQixJxZPOR2NU-NeDzL0RrMaOopVyC3MyzVo7FOyXG24GWczwiU22j_txy3vVBgwS33727zkSuI2lOsiX7r9PEl6hRMQCB)

`Clientes / tempo médio de engajamento`&#x20;

Este valor representa a taxa por mês com que os clientes desistem do app.

Comece adicionando ao modelo o novo estoque de **ClientesInativos**, o **Link** entre **Clientes** e **ClientesInativos** e o **Loop**. O novo modelo deve ficar assim:

![](https://lh4.googleusercontent.com/3dhNGVb79B_7_fMwMUhOuJWxdTNnpH2MW3kSNMFriF0o6B4uFFCAIR8RsOq_sdCR90iiXSIqhYuckI5ryDZXYVLwAUITMhiniauV6oTudIcCjJVkxXZQ3HWf8uQ1VTu9Cwy8GV7x)

&#x20;Pronto, o modelo deve ficar como a figura a seguir:

![](https://lh4.googleusercontent.com/NyP4dNC9SkWqwKZ-oyE6hRxCoudPdokcYtHGdxy9GW4500nxUzzam-smHZSKi6cFAu2oUrmRuP84paggEtq9t6Vb3GZ3_j9IhhxXYzC0ls8H97EPa3TtfdWlu_bDyGkg8JprZGaR)

O próximo passo é criar a **Table Function** para o tempo médio de engajamento dos usuários. O elemento está disponível na paleta de Dinâmica de Sistemas (**System Dynamics**) do AnyLogic:

![](https://lh3.googleusercontent.com/rnilSTsXWjHJpgvdXAGVkbdXa-H6HGEb8W8wzlGX7MLM_Jz9gkkhmvMj2kX5Os8CT3nOCuaYgATESA1rtuE8eRQCoVMEb1HEL_hMXssMv3wWduMWa4bfbYys4X4agXVBhKBeMoGa)

Para preencher os valores, você pode digitar um a um :cry: ou utilizar Copy/Paste :sunglasses:, bastando copiar a tabela fornecida alguns parágrafos atrás neste tutorial e colar no **Table data:**

![](https://lh5.googleusercontent.com/zYjb2I872gH8vmwYhEupOfdY7R_Dty5gxIscFJtuUCKDe23KKL-mkAQm-9EmOcyZNxFGfJhpPMLPgX42hO8V44q6lGOTtH2s_rclxgORnXgbGmtEFiKV8mPBg890btAxp70RSBWa)

Note que você deve apagar a primeira linha, pois ela repete o valor inicial de 0 clientes (sem a correção, ao tentar executar o modelo, o AnyLogic apresenta erro de compilação).

Antes de prosseguir, duas coisas bacanas que você deve saber sobre **Table funtions**:&#x20;

* No campo **Interpolation** você pode selecionar a técnica de interpolação adotada. No caso do exemplo escolha a opção **Linear**, que representa uma interpolação linear entre os pontos (as opções estão melhor descritas no Help);
* No campo **Out of range** você pode selecionar a regra a ser adotada caso o parâmetro de entrada fornecido pelo usuário esteja fora dos intervalo (**range**) da tabela. Para nosso caso, selecione **Nearest**:

![](https://lh5.googleusercontent.com/TWN3RAjevtofV4YZJlApPzcPA4I5TECrssyjFCujDX6U6pZuza-9Oax4ejYiwGIGGWVk54BJPguxX5Ad0zNsCuhGSLT7QxnKAfHVppMhsUtHJRh_88_izxyprhdRxiv6qsakyN0b)

Agora você pode utilizar a função onde quiser do modelo, em particular para equacionar o fluxo **taxaDeDesistencias**.&#x20;

![](https://lh3.googleusercontent.com/LoyMYlMEhXScz9Pp-boDqcje_C3HeHBGvr9OBd9HqeAmNbYRplf6X2iRRSy2XBAZ60wbRWTD9IOKTUvFGtGXAxt4ldwqxF2mabfd8rp6hlnMc2DhPO0KWjg8ppZ9Gu_XYkq0xgte)

Voilá, simule!

<img src="https://images.unsplash.com/photo-1518364538800-6bae3c2ea0f2?crop=entropy&#x26;cs=srgb&#x26;fm=jpg&#x26;ixid=MnwxOTcwMjR8MHwxfHNlYXJjaHw0fHxyb2NrZXR8ZW58MHx8fHwxNjM0NjQyODA3&#x26;ixlib=rb-1.2.1&#x26;q=85" alt="" data-size="original">

{% hint style="info" %}
**Perguntas**

* Com os novos resultados, você mudaria sua decisão de investir apenas 2 meses em marketing?
* Você consegue explicar o novo comportamento da curva de boca a boca?
  {% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://tutorial-ds.anylogicbrasil.com.br/apendice-ou-coisas-que-deixariam-o-tutorial-ainda-maior/table-functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
