Now, with their dataset, they will be left with a load of fields that start with the word "Custom_" - sometimes some of these fields will be aliased, sometimes they will not be used. If they are not used, then they will want to drop the fields from the document (to keep things nice).
Unfortunately, QlikView does not accept a command like
DROP FIELDS "Custom*";
So, we can use a couple of functions that are available in the script to do this for us. Here is a script sample:
MyTable:
LOAD * INLINE [
F1, F2, F3, F4
1, 2, 3, 4
];
Rename Field F1 to NewField;
Rename Field F3 to NewField2;
Let i = 1;
Do While i <= NoOfFields('MyTable')
Trace Getting Field $(i) From MyTable;
Let FieldName = FieldName($(i), 'MyTable');
Trace FieldName = $(FieldName);
Let Command = If('$(FieldName)' Like 'F*', 'Drop Field $(FieldName);', '');
Trace Command = $(Command);
$(Command)
Let i = $(i) + If('$(Command)' = '', 1, 0);
Loop
So, I load 4 fields, rename 2 of them, then loop through all the fields looking for a match ('F*') for the original names and create a command to execute in the script. (This is also a good example of using a dynamically created command in a script!)
The reload window should look like this:
MyTable << INL47EA 1 lines fetched
Getting Field 1 From MyTable
FieldName = NewField
Command =
Getting Field 2 From MyTable
FieldName = F2
Command = Drop Field F2
Getting Field 2 From MyTable
FieldName = NewField2
Command =
Getting Field 3 From MyTable
FieldName = F4
Command = Drop Field F4
Note that you need to use a While statement here not a For loop. This is because once you drop a field, say Field #2, the next field becomes that field number - Field #3 becomes Field #2 - so you will end up skipping fields. The While statement prevents this.
No comments:
Post a Comment
Note: only a member of this blog may post a comment.