Thanks again, GDRIII - I read through that article earlier, however not sure there is much I can use for this application.

I did manage to get a measure that yields the proper value, however it is incredibly slow at calculating, likely due to it effectively generating the weighted mean for each row of data to calculate the variance. The formula is:

YSD (Q):=SQRT(SUMX(ADDCOLUMNS(ADDCOLUMNS(ADDCOLUMNS(Q,"Mean",Calculate([YMean (Q)],All(Q),Q[Q]=Earlier(Q[Q]),Q[nIter]=Earlier(Q[nIter]))),"Delta",(Q[YMean] - [Mean])^2),"wDelta",[Delta] * SWITCH([Weights],1,1,2,[Weight],3,[WW_Weight])),AVERAGE([wDelta]))/[Orgs (Q)])

A few things to call out on the data structure:

Q is the main table in question here. It has a simple structure of:

Q[Q] - String - A question number

Q[Iter] - numeric - Some questions have multiple iterations, so this is storing this

Q[Resp] - Numeric - A numeric response to the question

Q[Weight] - Numeric - One of the weights

Q[WW_Weight] - Numeric - Another set of weights

Q[YMean] - Numeric - An alternative response, and what the above metric is actually determining the SD on

[Weights] is just a simple measure that is linked to a slicer to select which weighting scheme to use (unweigthed, using Q[Weight], or using Q[WW_Weight].

Each row of Q is a question response for a single respondent of the survey. So to isolate to a particular question number, a filter on Q[Q] and Q[Iter] is needed (which is the point of the use of earlier() in the formula - it is restoring the filters from slicers on the output pivot/cubefunctions).

Unfortunately, I need to generate a couple of hundred of these values on each of the worksheets, and with the recalculating the weighted mean for each row, performance is prohibitively slow. There has to be a less 'loopy' solution!