xellstorm
PT
Abrir o app

Como migrar um modelo do @RISK, ModelRisk ou Analytic Solver

Guia · Atualizado em outubro de 2026

O xellstorm abre sem o suplemento uma planilha criada para @RISK, ModelRisk ou Analytic Solver, lê 164 funções de distribuição desses suplementos e transforma cada fórmula em uma entrada, com os parâmetros vinculados às células da planilha. Antes de rodar, mostra o que converteu e cada fórmula que deixou de fora, com o motivo.

Das 164 funções, 53 são do @RISK, 62 do ModelRisk e 49 do Analytic Solver. O xellstorm lê também 65 formas que definem a distribuição por percentis, além de truncamento, marcadores de saída, matrizes de correlação e tabelas de várias simulações.

O que a importação encontra em uma planilha feita para @RISK

O exemplo é a estimativa de obra do exemplo de contingência de projeto, escrita como seria um modelo feito para @RISK: cada item de custo é =RiskPert(min, most likely, max, RiskName(label)) nas células da linha, cada evento de risco é um RiskBernoulli com a probabilidade do evento, o custo total e o estouro levam RiskOutput, Estrutura e MEP são correlacionados com RiskCorrmat, três orçamentos ficam em um RiskSimtable e uma célula informa o RiskMean do total. Uma segunda aba, “Demonstrations”, traz cinco fórmulas avulsas: duas formas aritméticas que são convertidas e três fórmulas que não são. Geramos o arquivo com um script; o xellstorm não precisa do @RISK para lê-lo, e você também não.

No app, Import from workbook, na etapa Distributions, lista as fórmulas encontradas (o xellstorm import, na linha de comando, imprime a mesma lista). Nesta planilha, ele converte 12 entradas: os 6 itens de custo, os 4 eventos de risco e 2 demonstrações aritméticas. Os itens de custo e os eventos de risco mantêm os parâmetros vinculados às células: alterar um mínimo ou uma probabilidade na planilha muda a próxima simulação. RiskName(A3) dá a cada entrada o nome do texto da linha. As duas demonstrações convertidas são um sorteio Normal multiplicado por um fator e outro cuja média é calculada a partir de outra célula. Nenhuma das duas é usada pelas saídas da estimativa.

O que a importação converte na planilha (células vinculadas entre parênteses, com o valor que contêm)
CélulaFórmula na planilhaVira
E3=RiskPert(B3,C3,D3,RiskName(A3))Site work: uma PERT com mín. B3 (100), mais provável C3 (120), máx. D3 (170)
E4=RiskPert(B4,C4,D4,RiskName(A4))Foundation: uma PERT com mín. B4 (300), mais provável C4 (340), máx. D4 (460)
E5=RiskPert(B5,C5,D5,RiskName(A5),RiskCorrmat(Correlation,1))Structure: uma PERT com mín. B5 (760), mais provável C5 (820), máx. D5 (1.010)
E6=RiskPert(B6,C6,D6,RiskName(A6),RiskCorrmat(Correlation,2))MEP: uma PERT com mín. B6 (540), mais provável C6 (610), máx. D6 (780)
E7=RiskPert(B7,C7,D7,RiskName(A7))Finishes: uma PERT com mín. B7 (400), mais provável C7 (450), máx. D7 (560)
E8=RiskPert(B8,C8,D8,RiskName(A8))Equipment: uma PERT com mín. B8 (260), mais provável C8 (280), máx. D8 (330)
D11=RiskBernoulli(B11,RiskName(A11))Ground conditions: uma Bernoulli com probabilidade B11 (0,25)
D12=RiskBernoulli(B12,RiskName(A12))Design change: uma Bernoulli com probabilidade B12 (0,35)
D13=RiskBernoulli(B13,RiskName(A13))Supplier delay: uma Bernoulli com probabilidade B13 (0,2)
D14=RiskBernoulli(B14,RiskName(A14))Severe weather: uma Bernoulli com probabilidade B14 (0,3)
Demonstrations!B3=RiskNormal(100,10)*1.1uma Normal com média 100 e desvio padrão 10, com o sorteio multiplicado por 1,1; apenas demonstração, não usada pela estimativa
Demonstrations!B4=RiskNormal(Estimate!C3*1.1,10)uma Normal com média Estimate!C3*1.1 (132) e desvio padrão 10; apenas demonstração, não usada pela estimativa

A mesma importação lê o resto do modelo:

As fórmulas que não são convertidas também aparecem na lista. Todas as 3 da segunda aba vêm com o motivo informado pela importação, e para cada uma há uma saída:

O que a importação não converte, com o motivo, na aba “Demonstrations” da planilha
FórmulaMotivo informadoO que fazer
=RiskBinomial(1,0.3)*RiskTriang(20,40,80)várias distribuições em uma fórmula não são convertidas; dê a cada distribuição uma célula de entrada própriaSepare: uma célula =RiskBernoulli(0.3) para saber se o risco ocorre, uma =RiskTriang(20,40,80) para o impacto, e multiplique as duas em uma terceira, como fazem os eventos de risco da estimativa.
=RISKCOMPOUND(RiskPoisson(3),RiskLognorm(10,3))RISKCOMPOUND não tem equivalente exato no xellstormO xellstorm não tem distribuição composta. Modele a contagem e os valores em células próprias, ou deixe a célula fora do modelo.
=RISKPERTALT(10%,90,"m.likely",100,90%,130)RISKPERTALT não tem equivalente exato no xellstormInforme o mínimo, o mais provável e o máximo da PERT (RiskPert), ou passe os percentis para RiskTrigen, que é convertida.

Rodar o modelo convertido

Com a configuração importada e 5.000 iterações, o custo total médio é 2.784,7 (milhares de US$). A média exata das mesmas distribuições é 2.784,7: as médias PERT (mín. + 4 × mais provável + máx.) / 6 mais a probabilidade de cada risco vezes o impacto. O erro padrão da média simulada é 1,7. Estrutura e MEP chegam a uma correlação de postos de 0,60. Os três orçamentos do RiskSimtable, rodados como a base e dois cenários:

O modelo importado, rodado: chance de o custo total superar cada orçamento do RiskSimtable (5.000 iterações, milhares de US$)
ExecuçãoOrçamentoChance de ultrapassar
Execução-base (simulação 1)2.90017,7%
Simulation 23.0005,2%
Simulation 33.1000,7%

Quanto maior o orçamento, menos vezes ele estoura. E como os cenários sorteiam os mesmos números da execução-base, a diferença entre as linhas vem do orçamento, não da amostragem.

Os resultados serão iguais aos do suplemento?

O modelo é o mesmo; os números aleatórios, não. Cada regra da importação liga uma função à distribuição que ela descreve, com os parâmetros convertidos como o fornecedor documenta, e é testada contra a distribuição equivalente do scipy. O script que gera os dados de teste também confere a média de cada mapeamento com a fórmula documentada pelo fornecedor. Por isso, quando todas as distribuições de uma planilha são convertidas, as médias e os percentis diferem dos do suplemento por ruído amostral, que diminui conforme você roda mais iterações: o erro padrão acima dá a ordem de grandeza esperada para a média.

As correlações são de postos, como o @RISK e o Analytic Solver as definem, e o xellstorm chega à correlação de postos pedida. Cada ferramenta tem o seu jeito de parear os sorteios para chegar lá, então um modelo correlacionado pode diferir um pouco mais nas caudas do que só o ruído amostral explica. A planilha não é alterada: o xellstorm lê o arquivo, e o modelo continua abrindo no suplemento.

O que é convertido

O que não é convertido

Várias distribuições em uma célula, uma distribuição dentro de outra função ou em um denominador, divisão direta de uma distribuição e cadeias que exigem mudar a ordem das operações não são convertidas. Por exemplo, (RiskNormal(0,1)+5)*2 e RiskNormal(0,1)*2*3 ficam de fora, com o motivo. RiskNormal(0,1)*(1/C1) é convertida quando C1 resulta em um multiplicador positivo e finito, porque a fórmula calcula o inverso explicitamente antes de multiplicar. Também ficam sem conversão multiplicadores que dão zero ou menos, argumentos que chamam funções ou dependem de células aleatórias, funções sem equivalente exato (distribuições compostas, funções de série temporal, RiskPertAlt e as outras formas por percentis com dois parâmetros de forma), o argumento U e as cópulas do ModelRisk e propriedades que não estão na tabela. O motor de cálculo não consegue calcular uma fórmula de suplemento não convertida; a verificação de compatibilidade indica qual é.

Funções compatíveis

As tabelas vêm da própria lista de regras do importador, então mostram exatamente o que ele converte. “Percentis” marca as formas que definem a distribuição por percentis; † marca as funções que só convertem com números. Abaixo de cada distribuição está o nome dela nas especificações do xellstorm.

Funções de distribuição que o importador converte, por distribuição († só com números: os parâmetros são calculados a partir dos argumentos)
Distribuição (nome no xellstorm)@RISKModelRiskAnalytic Solver
Bernoulli
bern
RiskBernoulliVoseBernoulliPsiBernoulli
Beta
beta
RiskBeta
RiskBetaGeneral
RiskBetaSubj†
VoseBeta
VoseBeta4
VoseBetaSubj†
PsiBeta
PsiBetaGen
PsiBetaSubj†
Binomial
binom
RiskBinomialVoseBinomialPsiBinomial
Burr XII
burr12
RiskBurr12——
Cauchy
cauchy
RiskCauchy
Percentis:
RiskCauchyAlt
RiskCauchyAltD
VoseCauchy—
Qui-quadrado
chi2
RiskChiSq
Percentis:
RiskChiSqAlt
RiskChiSqAltD
VoseChiSqPsiChiSquare
Percentis:
PsiChiSquareAlt
Qui, Maxwell
chi
—VoseChi
VoseMaxwell
—
Cumulativa
cumul
RiskCumul
RiskCumulD†
VoseCumulA
VoseCumulD†
VoseOgive†
PsiCumul
Dagum (Burr III)
burr
RiskDagumVoseDagumPsiDagum
Discreta
custom
RiskDiscrete
RiskDUniform
VoseDiscrete
VoseDUniform
PsiDiscrete
PsiDisUniform
Exponencial
expon
RiskExpon
Percentis:
RiskExponAlt
RiskExponAltD
VoseExpon
VoseExponential
PsiExponential
Percentis:
PsiExponentialAlt
Valor extremo (máx., Gumbel)
gumbel_r
RiskExtValue
Percentis:
RiskExtValueAlt
RiskExtValueAltD
VoseExtValueMaxPsiMaxExtreme
Percentis:
PsiMaxExtremeAlt
Valor extremo (mín.)
gumbel_l
RiskExtValueMin
Percentis:
RiskExtValueMinAlt
RiskExtValueMinAltD
—PsiMinExtreme
Percentis:
PsiMinExtremeAlt
F
f
RiskFVoseFPsiFDist
Vida em fadiga (Birnbaum–Saunders)
fatiguelife
RiskFatigueLife
Percentis:
RiskFatigueLifeAlt
RiskFatigueLifeAltD
VoseFatiguePsiFatigueLife
Percentis:
PsiFatigueLifeAlt
Fréchet
invweibull
RiskFrechet
Percentis:
RiskFrechetAlt
RiskFrechetAltD
—PsiFrechet
Percentis:
PsiFrechetAlt
Gama, Erlang
gamma
RiskGamma
RiskErlang
Percentis:
RiskGammaAlt
RiskGammaAltD
VoseGamma
VoseErlang
PsiGamma
PsiErlang
Percentis:
PsiGammaAlt
Geral (pesos relativos)
general
RiskGeneralVoseRelative—
Pareto generalizada
genpareto
—VoseGPD—
Histograma
histogram
RiskHistogrmVoseHistogramPsiHistogram
Secante hiperbólica
hypsecant
RiskHypSecant
Percentis:
RiskHypSecantAlt
RiskHypSecantAltD
VoseHSPsiHypSecant
Hipergeométrica
hypergeom
RiskHypergeoVoseHypergeoPsiHyperGeo
Uniforme inteira
randint
RiskIntUniformVoseIntUniform
VoseStepUniform†
PsiIntUniform
Gaussiana inversa
invgauss
RiskInvgauss
Percentis:
RiskInvgaussAlt
RiskInvgaussAltD
VoseInvGaussPsiInvNormal
Johnson SB
johnsonsb
RiskJohnsonSBVoseJohnsonBPsiJohnsonSB
Johnson SU
johnsonsu
RiskJohnsonSUVoseJohnsonUPsiJohnsonSU
Kumaraswamy
kumaraswamy
RiskKumaraswamyVoseKumaraswamy
VoseKumaraswamy4
PsiKumaraswamy
Laplace
laplace
RiskLaplace
Percentis:
RiskLaplaceAlt
RiskLaplaceAltD
VoseLaplace—
Lévy
levy
RiskLevy
Percentis:
RiskLevyAlt
RiskLevyAltD
VoseLevyPsiLevy
Percentis:
PsiLevyAlt
Log-logística
fisk
RiskLogLogistic
Percentis:
RiskLogLogisticAlt
RiskLogLogisticAltD
VoseLogLogisticPsiLogLogistic
Percentis:
PsiLogLogisticAlt
Logística
logistic
RiskLogistic
Percentis:
RiskLogisticAlt
RiskLogisticAltD
VoseLogisticPsiLogistic
Percentis:
PsiLogisticAlt
Lognormal
lognorm
RiskLognorm
RiskLognorm2
Percentis:
RiskLognormAlt
RiskLognormAltD
VoseLognormal
VoseLognormalE
PsiLogNormal
PsiLognorm
PsiLognorm2
Percentis:
PsiLogNormalAlt
Binomial negativa, geométrica
nbinom
RiskGeomet
RiskNegbin
VoseGeometric
VoseNegBin
VoseNegBinom
VosePolya†
PsiGeometric
PsiNegBinomial
Normal
norm
RiskNormal
RiskErf†
Percentis:
RiskNormalAlt
RiskNormalAltD
VoseNormal
VoseErf†
PsiNormal
PsiErf†
Percentis:
PsiNormalAlt
Pareto
pareto
RiskPareto
Percentis:
RiskParetoAlt
RiskParetoAltD
VoseParetoPsiPareto
Percentis:
PsiParetoAlt
Pareto II (Lomax)
lomax
RiskPareto2
Percentis:
RiskPareto2Alt
RiskPareto2AltD
VosePareto2PsiPareto2
Percentis:
PsiPareto2Alt
Pearson V (gama inversa)
invgamma
RiskPearson5
Percentis:
RiskPearson5Alt
RiskPearson5AltD
VosePearson5PsiPearson5
Percentis:
PsiPearson5Alt
Pearson VI (beta prima)
betaprime
RiskPearson6VosePearson6PsiPearson6
PERT
pert
RiskPertVosePERT
VoseModPERT
PsiPert
Poisson
poiss
RiskPoissonVosePoissonPsiPoisson
Rayleigh
rayleigh
RiskRayleigh
Percentis:
RiskRayleighAlt
RiskRayleighAltD
VoseRayleighPsiRayleigh
Percentis:
PsiRayleighAlt
Recíproca (log-uniforme)
loguniform
RiskReciprocalVoseReciprocalPsiReciprocal
t de Student
t
RiskStudent
Percentis:
RiskStudentAlt
RiskStudentAltD
VoseStudent
VoseStudent3†
PsiStudent
Percentis:
PsiStudentAlt
Triangular
triang
RiskTriangVoseTrianglePsiTriangular
Triangular a partir de percentis (Trigen)
trigen
RiskTrigen
Percentis:
RiskTriangAlt
VoseTriangleAltPsiTriangGen
Uniforme
unif
RiskUniform
Percentis:
RiskUniformAlt
RiskUniformAltD
VoseUniformPsiUniform
Weibull
weibull_min
RiskWeibull
Percentis:
RiskWeibullAlt
RiskWeibullAltD
VoseWeibull
VoseWeibull3
PsiWeibull
Percentis:
PsiWeibullAlt
Fórmulas de amostragem do próprio Excel que o importador converte († só com números)
Fórmulaxellstorm
=NORM.INV(RAND(), mean, sd)norm (loc, scale)
=NORMINV(RAND(), mean, sd)norm (loc, scale)
=mean + sd*NORM.S.INV(RAND())norm (loc, scale)
=LOGNORM.INV(RAND(), mu, sigma)lognorm (mu, sigma)
=LOGINV(RAND(), mu, sigma)lognorm (mu, sigma)
=GAMMA.INV(RAND(), alpha, beta)gamma (a, scale)
=GAMMAINV(RAND(), alpha, beta)gamma (a, scale)
=BETA.INV(RAND(), alpha, beta)beta (a, b)
=BETA.INV(RAND(), alpha, beta, A, B)beta (a, b, min, max)
=BETAINV(RAND(), alpha, beta, A, B)beta (a, b, min, max)
=BINOM.INV(n, p, RAND())binom (n, p)
=CRITBINOM(n, p, RAND())binom (n, p)
=RANDBETWEEN(a, b)randint (min, max)
=a + (b - a)*RAND()unif (min, max)
=a + s*RAND()unif (loc, scale)
=RAND()unif
=IF(RAND() < p, 1, 0)bern (p)
=IF(RAND() < p, x, y)†custom (x, prob)
Funções de propriedade, marcadores e estatísticas que o importador lê
FunçãoSuplementoVira no xellstorm
RiskTruncate@RISKTruncamento: truncate_min, truncate_max (antes de qualquer deslocamento)
RiskTruncate2@RISKTruncamento: truncate_min, truncate_max dos valores deslocados (movidos de volta pelo deslocamento)
RiskTruncateP@RISKTruncamento: truncate_pmin, truncate_pmax (percentis da distribuição)
RiskShift@RISKDeslocamento: shift
RiskName@RISKNome: o nome da entrada
RiskLock@RISKTrava: um valor fixo (RiskLock(v), ou o valor de RiskStatic)
RiskCorrmat@RISKCorrelação: correlações de postos entre as entradas de uma matriz
RiskDepC@RISKCorrelação: correlação de postos com a entrada de mesmo nome do par
RiskIndepC@RISKCorrelação: correlação de postos com a entrada de mesmo nome do par
RiskSimtable@RISKUm valor por simulação: uma célula fixa na execução-base, um cenário por simulação adicional
RiskOutput@RISKSaída: uma saída, com o nome informado
VoseXBoundsModelRiskTruncamento: truncate_min, truncate_max (antes de qualquer deslocamento)
VosePBoundsModelRiskTruncamento: truncate_pmin, truncate_pmax (percentis da distribuição)
VoseShiftModelRiskDeslocamento: shift
VoseInputModelRiskNome: o nome da entrada
VoseSimTableModelRiskUm valor por simulação: uma célula fixa na execução-base, um cenário por simulação adicional
VoseOutputModelRiskSaída: uma saída, com o nome informado
PsiTruncateAnalytic SolverTruncamento: tipo 1 (o padrão): truncate_min, truncate_max antes de qualquer deslocamento; -1: dos valores deslocados; 3: truncate_pmin, truncate_pmax
PsiTruncatePAnalytic SolverTruncamento: truncate_pmin, truncate_pmax (percentis da distribuição)
PsiShiftAnalytic SolverDeslocamento: shift
PsiNameAnalytic SolverNome: o nome da entrada
PsiCorrMatrixAnalytic SolverCorrelação: correlações de postos entre as entradas de uma matriz
PsiCorrDepenAnalytic SolverCorrelação: correlação de postos com a entrada de mesmo nome do par
PsiCorrIndepAnalytic SolverCorrelação: correlação de postos com a entrada de mesmo nome do par
PsiSimParamAnalytic SolverUm valor por simulação: uma célula fixa na execução-base, um cenário por simulação adicional
PsiOutputAnalytic SolverSaída: uma saída, que é a própria célula ou as células a que ela se refere
PsiSimOutputAnalytic SolverSaída: uma saída, que é a própria célula ou as células a que ela se refere
PsiMeanAnalytic SolverEstatística: a célula do primeiro argumento vira uma saída (como em toda estatística Psi de uma saída)

Perguntas

Preciso ter @RISK, ModelRisk ou Analytic Solver instalado?

Não. O xellstorm lê as fórmulas direto do arquivo .xlsx e calcula o modelo no navegador, com o motor de cálculo próprio, sem Excel nem suplemento. Salve antes os arquivos .xls e .xlsb como .xlsx.

O xellstorm altera a minha planilha?

Não. A importação transforma as fórmulas em entradas da configuração do xellstorm e não grava nada no arquivo do seu computador, então o modelo continua abrindo e rodando no suplemento.

O que acontece com uma matriz de correlação?

Entradas que compartilham um intervalo RiskCorrmat ou PsiCorrMatrix recebem as correlações de postos da matriz, lidas das células dela na importação; RiskDepC e PsiCorrDepen emparelham uma entrada com a de mesmo nome. Pares ilegíveis (uma matriz que não é quadrada, uma posição fora dela, uma célula sem número) aparecem nas notas da importação, e uma entrada não convertida é listada com o motivo e fica de fora dos pares dela. Se a matriz não for uma matriz de correlação válida, o xellstorm aplica a mais próxima que seja válida, e o app mostra essa matriz antes de rodar.

O que um RiskSimtable vira?

O primeiro valor fica na célula na execução-base, e cada valor seguinte vira um cenário, com o nome Simulation 2, Simulation 3 e assim por diante. Os cenários sorteiam os mesmos números aleatórios da execução-base, então a diferença entre eles vem apenas dos valores da tabela.

@RISK, ModelRisk e Analytic Solver são marcas de seus respectivos titulares. O xellstorm não tem afiliação com eles; os nomes das funções aparecem aqui apenas para dizer o que o xellstorm lê.

Veja também

O xellstorm é uma ferramenta de simulação de Monte Carlo para modelos do Excel, que roda no navegador: sem suplemento, e o arquivo nunca sai do seu computador.