The information in the DBANALYS report is correct, it is reporting two different metrics:
One is the the size of the information saved and the other is the physical size of the database.
Example: The following information from a dbanalys report (database with blocksize of 4KB):
Total Indexes size = 4.3G ( 4,508,877 KB)
Total Records size = 13.0G (13,631,488 KB)
Total Combined size = 17.3G (18,140,365 KB)
The first data shows the size in bytes (the sum of the physical size of each record and index) but doesn't take into account the part of each database block those records occupy that is not used. If for each database block, we don't use a small part of the block, then when adding all the remainder parts of all those database blocks the accumulative total is not so small.
47 empty block(s) found in the database (188 KB)
259951 free block(s) found in the database (1,039,804 KB)
8430598 total blocks found in the database (33,722,392 KB)
The second data are more real regarding the physical database file space occupation on disk, since it shows the real space the Database is taking on disk including that part of the database blocks that are not being used. If the size of all the database file extents are totaled, the result will be similar to this size (database blocks x database blocksize). Similarly, the PROSTRCT STATISTICS report displays results in database blocks which would correlate with these metrics.
In the example above, the difference between the space occupied by data and the space occupied on disk is around 14.8 GB. While there may be legitimate reasons for this difference, for example the database contains LOB objects that are not represented in a DBANALYS report before OpenEdge 11.6, or massive delete operations have recently taken place, the reasons for this difference should be analysed. Typically this indicates that a dump and load operation should be planned with better record per block configuration for database objects. For further discussion, refer to the Articles referenced below.