• I'm assuming that the grain of your Fact table is at the individual Sale level, right?

    There are a number of methods you could use to cater for the attributes of the Sale that you mention. Without knowing your business model, I can only generalize, but if your Sales are made by a Store or Reseller, the attribute denoting whether the Store/Reseller was a Wholesaler or not would belong to the Store/Reseller dimension. Likewise the country to which the goods were shipped could be represented in the Fact table by a key to a Geography or Location dimension.

    For the 'was a coupon used' data, you could use:

    a degenerate dimension where it's just part of the Fact table and stored as Y/N, Yes/No, True/False

    a junk dimension which is a collection of attributes related to the Fact table, but not to each other and are stored in a dimension table of their own. Such a table will have no natural (business) key so you'd need to use either a combination of some/all attributes or an identity value as a surrogate key to uniquely identify each set of attributes.

    a Yes/No dimension which would be very small (as you point out), but has the advantage of enabling you to cater for Unknown or NULL values

    Hope this helps.

    Regards

    Lempster