Metrics are your key measurements of performance within a specified concept from your datasource. They are usually aggregated (SUM) and/or specific values (SUM IF) from a single field within your datasource. They may be the sum of all clicks, or the sum of all impressions, but only for a certain campaign or market. However, it is most convenient to aggregate your quantifiable variable (clicks/impressions) and then use a dimension to break down the report by qualitative details such as campaign name / publisher or most commonly, date.
You can use dimension when each row of data provides these specific details. You'll then be able to breakdown your aggregate values into meaningful chunks. Every field or column in a datasource / table will most likely be available to create a metric or dimension, unless it is only an indexing column.
Sometimes, all this additional, qualitative data is stored in a table of its own, called a meta table. The data table will instead have an id such as a placement or campaign id, which will be used to match to the meta table, where more information will be stored in several subsequent columns which will be used to represent the campaign id from the data table.
The report builder is where you can map your metrics and dimensions to create a report, whilst you can actually create the metrics and dimensions from your datasources that you need in the report engine by using simple definitions and mappings that are calculated from the database.