# 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 %}
