Let's start with a very simple star schema model; for example, I assumed you don't need to worry about handling changes to dimensions' attributes.
factSales
DateKey
CustomerKey
ProductKey
Counter (=1; this is a factless fact table)
dimDate
DateKey
Date
Year
Quarter
Month
...
dimCustomer
CustomerKey
Name
Address
Zip
City
dimProduct
ProductKey
Name
Price (if it changes, you need move it to factSales)
How many people bought product x.
SELECT DISTINCT CustomerKey
FROM factSales
WHERE ProductKey IN ( SELECT ProductKey
FROM dimProduct
WHERE Name = 'Product X' )
How many sales are made from city x.
SELECT SUM(Counter)
FROM factSales
WHERE CustomerKey IN ( SELECT CustomerKey
FROM dimCustomer
WHERE City = 'City X' )
How many sales were made between Time x and y.
SELECT SUM(Counter)
FROM factSales
WHERE DateKey IN ( SELECT DateKey
FROM dimDate
WHERE Date BETWEEN DateX AND DateY )