Variants are a way to store the (field) settings (or values) a report can be executed with. Most reports can use variants. 

An example: a particular report is only used for... the document types "RE" and "EZ". Thus the values "RE" and "EZ" will always have to be entered when executing the report. These values can be stored in a variant; starting the report with this variant would result in a selection screen with "RE" and "EZ" already filled in.

When background jobs are scheduled, a variant is a must. Keeping track of when your program last ran can be a must as well - why not combine the two ! 

When you are dealing with large selections, it could be required to "process only half" of the selection first, and the rest later (or in an alternate job - simultaneously). But how do you know what "Half" a table is ? A simple report can help you out: load balancing table content by reporting the key values for each block. 

Sometimes it can be useful to have a default variant for a report. The transaction variant can help you there, where a transaction is linked to a report + variant (see more on this in atricle Variants). Or the SUBMIT is used.

What is a Dynamic Variant? Dynamic Variants consists of selection variable for a selection screen element for which a formula can be defined. If you want the selection screen to show a date range from today plus 7 days until today plus 70 days, the end used could arrange for this to happen. It will show as a non-changeable value range and it is calculated using the parameters you (or your end user) have passed.