Usually, it tends to be "inexpensive" or "inexpensive and of poor quality" (the alternative is "preiswert", mostly used in advertisements and such, which means something like "good value"). I've rarely heard it used as meaning exclusively "shabby".
Another common use of "billig" is "tacky", especially if it stands together with "aussehen". It also used to mean "just" or "fair", but that hardly crops up at all anymore, except for some idiomatic phrases like "recht und billig" (meaning "just and equitable").
And just one more meaning (there are a couple more, but they are all reasonably close to those already mentioned): when I was at school, "der Test/die Klausur was total billig" was quite common if you found the test or exam to be very easy. I haven't heard it since then and don't know if that was a local thing, but I like that it adds another meaning to the word.
Günstig is a good alternative for billig because it doesn't have negative connotations. Mind you, they don't have to mean exactly the same thing. "Billig" is just "cheap" in this context, while "günstig" can also mean "cheap for what it does/can/is". A computer for 1500€ certainly isn't "billig", but it can be "günstig" if its worth is greater than its price.
Although "günstig" does of course have many meanings besides "cheap", so be aware of the context:
Because "that" is a pronoun here, not a conjunction.
Rule of thumb: if you can replace "that" with "this" and the sentence still makes sense grammatically, it's going to be das (or perhaps der or die, but not dass).
"This is cheap!" -- makes sense. So it can't be dass.
"I know that you are right" -- "I know this you are right" -- does not work. This one does use dass.