Code:OLAP Radar: Różnice pomiędzy wersjami
Z Motława
(→Procedura do HierCube) |
|||
| Linia 1: | Linia 1: | ||
== Procedura do [[HierCube]] == | == Procedura do [[HierCube]] == | ||
| − | < | + | <pre> |
function CalcTrendByCol(Args: TSubFunctionCalculatorArgs; out Res: Double; TrendVer: Integer): Boolean; | function CalcTrendByCol(Args: TSubFunctionCalculatorArgs; out Res: Double; TrendVer: Integer): Boolean; | ||
var | var | ||
| Linia 53: | Linia 53: | ||
end; | end; | ||
end; | end; | ||
| − | </ | + | </pre> |
[[Kategoria: System]] | [[Kategoria: System]] | ||
[[Kategoria: Programowanie]] | [[Kategoria: Programowanie]] | ||
Wersja z 14:23, 20 mar 2009
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;