Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Dear Experts,
This are my input tables
Input Table:
Stem | Leaf |
A | A1 |
B | B1 |
C | C1 |
D | D1 |
B1 | B2 |
C1 | C2 |
D1 | D2 |
C2 | C3 |
D2 | D3 |
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:
Leaf | Value |
A1 | 10 |
B1 | 20 |
C1 | 30 |
D1 | 40 |
B2 | 50 |
C2 | 60 |
D2 | 70 |
C3 | 80 |
D3 | 90 |
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 :
Level0 | Level1 | Value | Level2 | Value | Level3 | Value |
A | A1 | 10 | - | - | - | - |
B | B1 | - | B2 | 50 | - | - |
C | C1 | - | C2 | - | C3 | 80 |
D | D1 | - | D2 | - | D3 | 90 |
Thanks & Regards
Ahmar
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;
Hi Adam,
It is possible to load all values i.e Value1, Value2...... on single field like Value.
I don't quite understand, do you mean the SUM of all values? so a single total value for the row?
we want to get the coresponding value for all the layers as in Data table
in a single column
OK so in your example for your row C value = 170?
when we click on C value = 80 not 170.
Ok so the value column should show the value for the lowest leaf in the row?
Yes
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