Internal session variables are those which are built using the built in variables/ functions of incorta like currentdate , currentmonth etc. They do not need a datasource to connect. Since the internal session variables use the latest data present in the schemas built, they are independent of DB status(active/down).
External session variables are based on SQL commands like : select currentdate() from dual etc.
This variable is further used in other calculations/filters. Since this variable hits the DB when retrieving the value for select statement, it is database dependent. This may hit the performance of visualization sometimes.
An internal session variable is depicted by ! symbol inside the oval shapped image while external is with a #.
Let me know if you need further info,
External session variables are needed in two cases:
1. The data behind them is not in Incorta, for whatever reason
2. The data behind them is changing at a much faster rate than the refresh rate in Incorta, and you want the session variable to be real time. For example, you are using for security, and security privileges are changing at a very high pace in your source application.
But in general, as mentioned by Soumy, internal session variables will give you better performance because they don't depend on the external database.