Code:OLAP Radar
Z Motława
Procedura do HierCube
function CalcTrendByCol(Args: TSubFunctionCalculatorArgs; out Res: Double; TrendVer: Integer): Boolean;
var
Node: TLabelNode;
Nodes: TLabelNodes;
i: Integer;
CurrCell, PrevCell: PDataCell;
x0, x1: Double;
begin
{ by default return empty cell }
Result := False;
with Args do
begin
//if not FunctionData[ColTreeIndex, RowTreeIndex].NotEmpty then Exit;
CurrCell := FunctionData[ColTreeIndex, RowTreeIndex];
if CurrCell.NotEmpty then
begin
x1 := CurrCell.Data;
if x1 = 0.0 then Exit;
end
else
Exit;
if RowLabelNode = nil then Exit;
{ find the parent node of RowLabelNode }
Node := RowLabelNode;
{ for the most total node return empty value }
if Node = nil then Exit;
{ the list of all nodes from the area of adequate comparisons including the given one }
if Node.IsSubTotal then Exit;
if (Node.Parent <> nil) and Node.Parent.IsSubTotal then Exit;
Nodes := Node.LabelNodes;
{ find previous cells from the area of adequate comparisons }
i := Node.Index - 1;
if i >= 0 then
begin
Node := Nodes[i];
if not Node.IsSubTotal then
begin
PrevCell := FunctionData[ColTreeIndex, Node.TreeIndex]; // RowTreeIndex
if PrevCell.NotEmpty then
begin
Result := True;
x0 := PrevCell.Data;
case TrendVer of
1: Res := (1 - x0/x1) * 100;
2: Res := x0/x1 * 100;
end;
end;
end;
end;
end;
end;