I have a column set that is doing essentially the same thing. Here's how I accomplished what you're asking for.
My columns:
Col_Month Col_MonthComp Col_Var %_Var%
Select Scenario/Month 1 Select Scenario/Month 2 Variance $ Variance %
The third column (Col_Var) uses BWDiff to calculate the variance based on the account type.
Here's my member filter: GetDataCell(BWDiff(CVC(Col_Month),CVC(Col_MonthComp))):Name(Var $)
The fourth column (%_Var%) then divides to calculate the variance percentage
Here's my member filter: GetDataCell(Divide(CVC(Col_Var),CVC(Col_MonthComp))):Name(Var %)
For your GetDataCell issue, you'll need to use column &/or row overrides to have the variances columns calculate properly. I'd try to avoid using the GetDataCells in the rows, by using alternate hierarchies where possible.