You should have a DimContract & FactContract, as well as a DimComplaint & FactComplaint.
DimContract may consist of only the ContractID (degenerate dimension), but Code may also belong here as it looks dependent on the ContractID.
FactContract connects all of the dimension attributes that describe the Contract
- DimContractType,
- DimDate as DimDateContractSigned
- DimCustomer?
- DimSalesPerson?
DimComplaint would likely consist of the ComplaintID and Code. If website is free-text it could be included here as well, if the user selects it from a list, it would be in the fact.
FactComplaint connects all of the dimension attributes that describe the Complaint:
- DimComplaint,
- DimContractID,
- DimServiceType,
- DimTitle,
- DimStatus,
- DimDate as DimDateOfComplaint,
- [DimWebsite if appropriate]
In this example, since the Complaint references a Contract and a Contract references a Customer, you can see the relationship between the customer and the complaint without needing a direct reference from FactComplaint to DimCustomer.