Different portfolio risk decompositions answer different questions. Before discussing what method to use, first ask why you want a decomposition and what definition of risk are you using.
Is the point to examine how portfolio return volatility is affected by a tiny change in portfolio weights? On the other hand, if the point is to make a statement like, "30% of our risk comes from China," that's quite problematic because risk isn't additive.
Quick definitions to get on the same page
Let $\mathbf{R}$ be a vector of random variables denoting excess returns (i.e. in excess of the risk free rate), and let $\mathbf{w}$ be a vector denoting weights in a portfolio. (Weights need not sum to 1 because we have excess returns: 1 - $\sum w_i$ is implicitly weight on risk free rate.)
$$ R_p = \mathbf{w}' \mathbf{R} = \sum_i w_i R_i$$
Let $\Sigma = \operatorname{Cov}(\mathbf{R})$ be the covariance matrix for the vector of returns. Standard deviation of portfolio returns as a function of portfolio weights is given by $ \sigma(R_p)(\mathbf{w}) = \sqrt{ \mathbf{w}' \Sigma \mathbf{w} }$.
Measure 1: $\frac{\partial \sigma}{\partial \mathbf{w}}$
One standard decomposition is to simply look at the marginal contributions to portfolio standard deviation:
$$\frac{\partial \sigma}{\partial \mathbf{w}} = \frac{1}{\sigma}\Sigma\mathbf{w}$$
Measure 2: $\mathbf{w} \circ \frac{\partial \sigma}{\partial \mathbf{w}} $
By Euler's homogeneous function theorem we have:
$$\sum_i w_i \frac{\partial \sigma}{\partial w_i} = \sigma(\mathbf{w})$$
This is still a marginal measure. (e.g. to see this, examine how this looks if a portfolio has two assets which are near perfect hedges for each other.)
Observe also that $\frac{\partial \sigma}{\partial \log w_i} = w_i \frac{\partial \sigma}{\partial w_i}$, hence $w_i \frac{\partial \sigma}{\partial w_i}$ tells you how much the standard deviation changes for a small percent change in your portfolio position. Eg. If I increase a weight 1 percent from from .02 to .0202, what happens to the standard deviation of portfolio returns?
Same as above but use weights on factors instead of weights on securities
Let $f_1, \ldots, f_k$ be zero cost portfolio returns (aka factors). Let $\Sigma^{(f)}$ be the covariance matrix. We can do the same type of math as above where $\beta$s denote weights on factors instead of weights on individual securities. We also have variance from an $\epsilon$ term orthogonal to the factors.
$$ R_p = \beta_1 F_1 + \beta_2 F_2 + \ldots \beta_k F_k + \epsilon $$
$$ \mathbb{V}(R_p) = \mathbb{V}(\epsilon) + \sum_{ij} \beta_i \beta_j \mathbb{Cov}(F_i, F_j)$$
Orthogonal factors: same thing as above but if factors are orthogonal (i.e. uncorrelated)
Because excess returns $R_i$ and $R_j$ are almost certainly correlated, the variance of portfolio returns is not simply the sum of the variances.
$$\mathbb{V}(R_p) = \mathbf{w}' \Sigma \mathbf{w} = \sum_{ij} w_i w_j \Sigma_{ij}$$
With $n$ securities, you have $n$ variance terms $n(n-1)$ $\Sigma_{i\neq j}$ covariance terms. On the other hand, if you have weights on orthogonal random variables, then you get a Pythogorean theorem type result and the variance of the sum is the sum of the variances. This decomposition gets much cleaner because all the covariance terms are zero.
$$ \mathbb{V}(R_p) = \mathbb{V}(\epsilon) + \sum_{i} \beta_i^2 \mathbb{V}(F_i)$$
With orthogonal factors, you can write the portfolio variance as simply the sum of variance stemming from each individual factor (because in a sense there are no statistical interactions between the factors).
(Note: portfolios must be constructed specially to have orthogonal returns)
Average over orderings methods
As noted previously, if you have $n$ securities, you don't get a clean, linear decomposition into $n$ components because of all the covariance terms: you have a sum over $\frac{n(n-1)}{2}$ covariance terms.
Another possible thing to do is to get at some notion of importance by looking at marginal variance (from adding the position) averaged over different orderings. Eg. in the two return case look at:
- Add security 1 first. $\mathbb{V}(w_1 R_1) = w_1^2 \Sigma_{11}$ and
- Add security 1 second. $\mathbb{V}(w_1 R_1 + w_2 R_2) - \mathbb{V}(w_2 R_2) = w_1^2
\Sigma_{11} + 2 w_1 w_2 \Sigma_{12}$
Then average these two orderings together to get:
$$ w_1^2 \Sigma_{11} + w_1 w_2 \Sigma_{12}$$
This measure probably has some nice properties, but it is a bit abstract in a sense.
A warning
Something to watch out for is that unsophisticated types may want to say something like 20% of our risk is from exposure to China, 80% is from North America. But unless each region is statistically independent (which they most certainly aren't), this statement can never really make great sense. The positions interact! You have the covariance term between China and North America.
Anyway, I think a first question you need to ask and answer is why am I trying to decompose risk? What question am I trying to answer?