The totals reported by the balance command are only the topmost parent
accounts.  To see the totals of all child accounts as well, use the
@option{-s} option:

@example
ledger --real -B -s bal
@end example

This reports:

@smallexample
           $2,980.00  Assets
           $1,480.00    Bank:Checking
           $1,500.00    Brokerage
          $-2,500.00  Equity:Opening Balances
              $20.00  Expenses:Books
            $-500.00  Income:Salary
@end smallexample

This shows that the @samp{Assets} total is made up from two child
account, but that the total for each of the other accounts comes from
one child account.

Sometimes you may have a lot of children, nested very deeply, but only
want to report the first two levels.  This can be done with a display
predicate, using a value expression.  In the value expression,
@code{T} represents the reported total, and @code{l} is the display
level for the account:

@example
ledger --real -B -d "T&l<=2" bal
@end example

This reports:

@smallexample
           $2,980.00  Assets
           $1,480.00    Bank
           $1,500.00    Brokerage
          $-2,500.00  Equity:Opening Balances
              $20.00  Expenses:Books
            $-500.00  Income:Salary
@end smallexample

Instead of reporting @samp{Bank:Checking} as a child of @samp{Assets},
it report only @samp{Bank}, since that account is a nesting level of
2, while @samp{Checking} is at level 3.

To review the display predicate used---@code{T&l<=2}---this rather
terse expression means: Display an account only if it has a non-zero
total (@code{T}), and its nesting level is less than or equal to 2
(@code{l<=2}).