Print Page  
Financials / Income Statement
FundsFromOp(offset,type[,NAHandling])
Full Description
non-GAAP measure of recurring operating performance. It starts with net income and adjusts for non-cash and non-recurring items—most notably adding back depreciation and amortization and removing gains or losses from asset sales. The intent is to isolate the sustainable cash-generating power of the underlying business by stripping out accounting distortions and one-time events. Unlike GAAP cash flow measures, FFO is designed for comparability across firms and time, especially in asset-heavy industries. For REITs, FFO is the primary earnings metric because GAAP depreciation materially understates the economics of real estate assets, which often maintain or increase value over time.

Compared with Operating Cash Flow (OCF), FFO is typically smoother and less affected by short-term working capital swings. OCF includes changes in receivables, inventory, and payables, making it more sensitive to timing effects and near-term liquidity conditions. FFO, by contrast, focuses on normalized operating performance and excludes many transitory cash movements. In quantitative factor models, OCF-based ratios often react faster to financial stress, while FFO-based ratios tend to produce more stable cross-sectional signals—particularly in REIT universes where depreciation adjustments are economically essential.


Source and Availability

The data points come from SEC filings or earnings announcements of a company (click here for the line-item reference spreadsheet). Since the data is "standardized" by the data provider the exact number may not exist in the original source. The data is usually a single line-item (see the link at the end for an excel spreadsheet with details). There are two access methods: prebuilt factors and using a function syntax.

When using the function syntax you specify the historical period using parameters in parenthesis as follows:

function(offset,type[,NAHandling])

offset: 0-20 (for interim) 0-10 (for annual)
type: QTR (for interim), ANN (for annual), TTM (for trailing twelve months)
NAHandling: [FALLBACK],KEEPNA,ZERONA

For types QTR & ANN the value is taken straight out of the filing with the corresponding offset, ex: 0 is most recent, 1 is previous, etc. TTM types are computed in two ways: for income and cash flow statement values are calculated by adding four quarterly values. For balance sheet items, TTM is the average of the trailing four quarters.

The NAHandling parameter is optional and is used to control what happens in preliminary reports where many items could be missing. Preliminary reports are press releases by the company and only affect the most recent ("0") offset period. They can last several weeks and can cause false signals due to incomplete data (see "CompleteStmt" for a way to identify companies with preliminary data).

Three options are available when an NA is found in a preliminary report:

 

FALLBACK this is the default. When an NA is encountered the value is pulled from the offset "1" period.
KEEPNA do nothing. NAs will be preserved, which can cause the entire expression to fail.
ZERONA NAs are converted to 0


Pre-built factors are available for convenience and correspond to the following formula syntax:

 

Period Description Corresponding Parameters
Q Recent Quarter (0, QTR)
PQ Prior Quarter (1, QTR)
PYQ Prior Year quarter (4, QTR)
TTM Trailing Twelve Months (0, TTM)
PTM Prior Trailing Twelve Months (4, TTM)
A Recent Annual (0, ANN)
PY Prior Year (1, ANN)
Gr%PQ Growth % PQ (0, QTR) / (1, QTR)
Gr%PYQ Growth % PYQ (0, QTR) / (4, QTR)
Gr%TTM Growth % TTM (0, TTM) / (4, TTM)
Gr%PQTTM Growth % TTM 1Q Ago (0, TTM) / (1, TTM)
Gr%A Growth % Annual (0, ANN) / (1, ANN)
Gr%3Y Growth % 3 year (0, ANN) / (3, ANN) annualized
Gr%5Y Growth % 5 year (0, ANN) / (5, ANN) annualized
Gr%10Y Growth % 10 year (0, ANN) / (10, ANN) annualized
RSD%ANN RSD % 10Y of annuals

LoopRelStdDev
("function(CTR,ANN)",10,0,1,1))

RSD%TTM RSD % 5Y of TTM LoopRelStdDev
("function(CTR*2,TTM)",10,0,1,1))
RegEstTTM Regression Est 5Y Eval(LinReg("function(CTR * 2, TTM)", 10)
, EstimateY(0), NA)
RegGr%TTM Regression Gr% 5Y Eval(LinReg("function(CTR * 2, TTM)", 10)
,RegGr%(2), NA)
RegEstANN Regression Est 10Y Eval(LinReg("function(CTR, ANN)", 10)
, EstimateY(0), NA)
RegGr%ANN Regression Gr% 10Y Eval(LinReg("function(CTR, ANN)", 10)
,RegGr%(1), NA)
%SalesQ % of Q Sales function(0, QTR) / Sales(0, QRT)
%SalesA % of A Sales function(0, ANN) / Sales(0, ANN)
%AssetQ % of Q Assets function(0, QTR) / AstTot(0, QRT)
%AssetA % of A Assets function(0, ANN) / AstTot(0, ANN)
PSQ Per Share Q function(0, QTR) / Shares(0, QRT)
PSA Per Share A function(0, ANN) / Shares(0, ANN)
3YAvg 3 Year Average LoopAvg("function(CTR, ANN)", 3)
5YAvg 5 Year Average LoopAvg("function(CTR, ANN)", 5)


NOTE: PTM offset is 4 , not 1, since it uses interim periods

Click Here for the Line-Item Reference Spreadsheet.