Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
ahmar811
Creator III
Creator III

Executing of values till leaf node.

Dear Experts,

This are my input tables

Input Table:

StemLeaf
AA1
BB1
CC1
DD1
B1B2
C1C2
D1D2
C2C3
D2D3

I have given to analyse for Stem (A,B,C,D)

Step 1- I need to find Leaf value of Stem (A,B,C,D)  i.e (A1,B1,C1,D1)

Step 2- Find these values in Stem & corresponding leaf values i.e (B2,C2,D2)

Note- If corresponding value is not found  in Step 2 like for A1 then its null

Above steps should be performed till all leaf are found in loop with first iteration as Level2 then Level 3 & so on.

Data Table:

LeafValue
A110
B120
C130
D140
B250
C260
D270
C380
D390

The Result should be look like this, so that we will be able to make a drill group with all levels & get corresponding values as shown:

  Output :

Level0Level1ValueLevel2ValueLevel3Value
AA110----
BB1-B250--
CC1-C2-C380
DD1-D2-D390

'I have tried using left join to make Level but the logic failed at Level 2.

Also I m not able to retain null values as in above Note'


Thanks & Regards

Ahmar

18 Replies
adamdavi3s
Master
Master

Try this:

input:

load * inline [

Stem,Leaf

A,A1

B,B1

B,B2

C,C1

D,D1

B1,B2

B1,B3

C1,C2

D1,D2

C2,C3

D2,D3

D3,D4

D4,D5

D4,D6

];

left join (input)

values:

load * inline [

Leaf, Value

A1, 10

B1, 20

C1, 30

D1, 40

B2, 50

C2, 60

D2, 70

C3, 80

D3, 90

];

//cheat using the hierarchy belongs to to sus out our layers

HierarchyBelongsTo:

HierarchyBelongsTo (Node, Parent, NodeName, AncestorID, AncestorName, DepthDiff)

Load

  Leaf as Node ,

  Leaf as NodeName,

  Stem as Parent

resident input;

//create a layers table to we can figure out which layer we want to load

LEFT JOIN (input)

LOAD DISTINCT Node as Leaf, max(DepthDiff)+1 as MaxDepth

Resident HierarchyBelongsTo

GROUP BY Node;

//figure out our max depth we need to work to

MaxLayers:

LOAD max(MaxDepth) as MaxLayers

resident input;

LET vLayers = peek('MaxLayers');

//drop working table

DROP TABLE MaxLayers;

//LOAD our top layer which won't have a record in the layers table

HierarchyMain:

LOAD DISTINCT Stem as Layer0

resident input

WHERE NOT EXISTS (Node,Stem);

//now run our loop

for i=1 to $(vLayers)

let x = $(i)-1;

LEFT JOIN (HierarchyMain)

LOAD Stem as 'Layer$(x)',Leaf as 'Layer$(i)', Value as 'Value$(i)'

resident input

WHERE MaxDepth = $(i) ;

next i;

//drop working table

DROP TABLE HierarchyBelongsTo;

DROP TABLE input;

ahmar811
Creator III
Creator III
Author

Hi Adam,

It is possible to load all values i.e Value1, Value2...... on single field like Value.

adamdavi3s
Master
Master

I don't quite understand, do you mean the SUM of all values? so a single total value for the row?

ahmar811
Creator III
Creator III
Author

we want to get the coresponding value for all the layers as in Data table

in a single column

adamdavi3s
Master
Master

OK so in your example for your row C value = 170?

ahmar811
Creator III
Creator III
Author

when we click on  C value = 80 not 170.

adamdavi3s
Master
Master

Ok so the value column should show the value for the lowest leaf in the row?

ahmar811
Creator III
Creator III
Author

Yes

adamdavi3s
Master
Master

Ok I will have a think when I get a moment, it must be pretty easy to do as you just add a column called 'lowestleaf' and join that to the value table