Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
If the Key in Table 1 = 1,2,3
and I have a Key in Table 2 that is 1,2,3
But in Table 1 each key appears only once and in Table 2 it appears around three times per record. I want only the table 1 enriched with table 2 data and not more data lines created than table 1 initially had.
If that is what you wanted to know aswell... Any thoughts on this yet?
If you want to join all the fields from table2 to table one then you're better off with a join. The alternative is a lot of mapping tables and applymaps or something complicated involving concatenating all the fields of a record together in the mapping table and splitting that field again in the target table.
Try something like this:
Table1:
LOAD ShipmentNumber2, ...other_fields... FROM ...table1_source... ;
LEFT JOIN (Table1)
LOAD DISTICT ShipmentNumber2, ...all_other_fields_that_you_want_to_join... FROM ...table2_source... ;
The lines in the 2nd chart: Do they contain the same data for every record or do you want to sum/count those values to be 1 value?
Maybe you can supply us with some demo data?
First, you should read Don't join - use Applymap instead. It describes a method that uses only one value.
Then you need to answer the question: If there are three records in Table 2 that match - which record should you use? The first? The last?
HIC
thanks for your reply.
it is very likely applymap is my answer I will carefully read through this first. I doesn't matter which to take ymthe are identical.
exactly the same so want it to work as vlookup. Group by doesn'&t work on 15mio records...
I have read trough Don't join - use Applymap instead however I am not getting it working. Probably because I am not the most experienced Qlikview user.
MapCustomerIDtoCountry:
Mapping Load CustomerID, Country From Customers ;
CustomerID and Country are here variables that appear in table 'Customers'? Where is the table customers? Is that above this script line or is this a file you are referring to that hasn't been loaded yet in the script.
In my situation this would look like:
Mapping Load [Shipment Number2], SKU From FULLOUTBOUND_CALC_GROUPBY.qvd;
Where [Shipment Number 2] and SKU are both variables in the table FULLOUTBOUND_CALC_GROUPBY.qvd which has not been loaded yet.
When this is done the next was;
Orders:
Load *,
ApplyMap('MapCustomerIDtoCountry', CustomerID, null()) as Country
From Orders ;
Orders is a table that also exist yet or? Where does it come from?
In my situation I would assume this is the table where also Shipment Number2 is in and where I would like to hook SKU on.
FINALFULLOUTBOUD:
Load *,
ApplyMap('MapShipment Number2toSKU', [Shipment Number2], null()) as SKU
From FULLOUTBOUND_CALC_GROUPBY_2.qvd;
Where FINALOUTBOUND is the name of the table I want to end up with and FULLOUTBOUND_CALC_GROUPBY_2 is the file which is not loaded yet and contains the [Shipment Number2].
Long story short just to be sure we are on the same page here.
In table 1 there is variable 1 and only variable 1 which are some 4.800.000 100% unique values.
In table 2 there are some 40 variables of which 1 is matching in table 1. However table 2 has maybe 3 to 5 identical lines 100% identical lines. Which results in a data set of 15.000.000 milion lines.
What I want to end up with is 1 table with 4.800.000 rows/lines with 40 variables on each line.
Just as with a vlookup it would be perfect to hit the first record and no more after.
Key Variables are;
1. The unique value in both tables, which is [Shipment Number2]
2. The name of the file with only [Shipment Number2] = FULLOUTBOUND_CALC_GROUPBY_2.qvd or the name of the table when already loaded in the script Unique_Lines
3. The name of the file with all the 40 variables and unique variable [Shipment Number2] = FULLOUTBOUND_CALC_GROUPBY.qvd or the name of the table when already loaded in the script FULLOUTBOUND_CALC
Normally I could just do a groupby on the FULLOUTBOUND_CALC_GROUPBY however with 15.000.000 lines and 40+ variables my laptop doesn't cope.
I hope I am making my self clear and you can help me with this information how to set up this vlookup.
MapCustomerIDtoCountry:
Mapping Load CustomerID, Country From Customers ;
CustomerID and Country are here variables that appear in table 'Customers'? Where is the table customers? Is that above this script line or is this a file you are referring to that hasn't been loaded yet in the script.
Customers is the name of a source table. The code is just example code and won't work in real life. If a connection to an sql database is established first then MAPPING SELECT CustomerID, Country FROM Customers; would work if that database contains a table named Customers. If instead there exists a qvd file with the source table then MAPPING LOAD CustomerID, Country FROM Customers.qvd (qvd); can be used.
As to your original problem... I'm not sure what you want to do. How many fields from table 2 do you want to add to table1?
Clear on your first answer, I have that working now.That means no errors regarding script when run. However no matches yet on the values only null() matches.
Regarding your question... All of them
Mapping Load [ShipmentNumber2], SKU
From
FULLOUTBOUND_CALC_GROUPBY.qvd
(qvd);
Mapping Load [ShipmentNumber2], Variable1
From
FULLOUTBOUND_CALC_GROUPBY.qvd
(qvd);
FINALFULLOUTBOUD:
Load *,
ApplyMap('MapShipmentNumber2toSKU', [ShipmentNumber2], null()) as SKU,
ApplyMap('MapShipmentNumber2toVariable1', [ShipmentNumber2], null()) as Variable1
From
FULLOUTBOUND_CALC_GROUPBY_2.qvd
(qvd);
DROP Table Unique_Lines;
DROP Table FULLOUTBOUND_CALC;
Results in;
With;
I am probably explaining totally wrong... But don't know how else to explain...
I am simply extremely bad in copying others examples
MapShipmentNumber2toSKU:
Mapping Load ShipmentNumber2, SKU
From
FULLOUTBOUND_CALC_GROUPBY.qvd
(qvd);
MapShipmentNumber2toVariable1:
Mapping Load ShipmentNumber2, Variable1
From
FULLOUTBOUND_CALC_GROUPBY.qvd
(qvd);
FINALFULLOUTBOUD:
Load *,
ApplyMap('MapShipmentNumber2toSKU', [ShipmentNumber2], null()) as SKU,
ApplyMap('MapShipmentNumber2toVariable1', [ShipmentNumber2], null()) as Variable1
From
FULLOUTBOUND_CALC_GROUPBY_2.qvd
(qvd);