Focal Point
How to generate a Cartesian Product

This topic can be found at:
https://forums.informationbuilders.com/eve/forums/a/tpc/f/7971057331/m/7161077331

April 07, 2004, 12:44 PM
<Stahl>
How to generate a Cartesian Product
Hi, everybody

my question is:
is it possible to create a cartesian product out of two files each of them having one field. The fields don't have something in common.

E.g:
File1, Field1: A , B , C
File2, Field2: 99, 55

The resulting HOLD-file should contain 2 x 3 = 6 rows, and two fields.

HOLD:
Field1: A, Field2: 99
Field1: A, Field2: 55
Field1: B, Field2: 99
Field1: B, Field2: 55
Field1: C, Field2: 99
Field1: C, Field2: 55

All efforts using MATCH or JOIN didn't succeed.
Has anybody got a clue how to code in WebFOCUS?

Thanks for any advice!
Stahl
April 07, 2004, 01:49 PM
Mikel
See the following example using JOIN:


-* PFMIKPCR - FOCEXEC - 2004.04.07 - Mikel G�mez - Producto cartesiano.

-* _____________________________________________________________________
-* Test files generation for problem repro.

-* Test FILE 1.
TABLE FILE CAR
BY COUNTRY AS 'FIELD1'
ON TABLE HOLD AS FILE1
ON TABLE SET ASNAMES ON
END
-RUN

-* Test FILE 2.
TABLE FILE CAR
BY CAR AS 'FIELD2'
ON TABLE HOLD AS FILE2
ON TABLE SET ASNAMES ON
END
-RUN

-* _____________________________________________________________________
-* Objectives.

-* Now, we have:
-* FILE1, FIELD1: ENGLAND, FRANCE..., 5 values.
-* FILE2, FIELD2: ALFA, AUDI..., 10 values.
-*
-* And we need the cartesian product:
-* FILE3, 5 x 10 = 50 records.
-*
-* Steps:
-* 1. Create temp file of second file with common blank index.
-* 2. Join first and temp file using the common blank index using TO ALL.
-* 3. Create the cartesian product.

-* _____________________________________________________________________
-* Index second file with common blank index.

TABLE FILE FILE2
PRINT
COMPUTE KEY/A1 = ' ' ;
FIELD2
ON TABLE HOLD AS FILE2IND FORMAT FOCUS INDEX KEY
END
-RUN

-* _____________________________________________________________________
-* 2. Join files using common blank index. (*** TO ALL ***)

JOIN CLEAR *
JOIN KEY WITH FIELD1 IN FILE1 TO ALL KEY IN FILE2IND AS J1

-* _____________________________________________________________________
-* 3. Create and show cartesian product.

DEFINE FILE FILE1
KEY/A1 WITH FIELD1 = ' ' ;
END

TABLE FILE FILE1
PRINT
FIELD1
FIELD2
END
-RUN
I hope this helps.
Regards,
Mikel

This message has been edited. Last edited by: <Mabel>,
April 07, 2004, 02:16 PM
<Stahl>
Super trouper, Mikel! That was exactly what I needed.
Thanks a lot!
Stahl
April 08, 2004, 05:19 PM
GCohen
Have you tried the command..
SET CARTESIAN=ON
April 13, 2004, 06:36 AM
<Stahl>
Yes, I did, but it didn't work. Maybe I made a mistake
April 13, 2004, 06:53 AM
Mikel
SET CARTESIAN is not applicable in this case.
quote:
From SET CARTESIAN (Creating Reports With WebFOCUS Language)
SET CARTESIAN enables you to generate a report containing all combinations of non‑related records or data instances in a multi‑path request...
In this topic we haven't path. We have two unrelated files without any common field. We must create the path properly.

Regards,
Mikel