dictionaryunidatau2uniquery

How do associations, @NS and @NV work in UniData Dictionaries?


Does anyone have a quick example of how Associations, @NS and @NV work in UniData?

I’m trying to work out associations in dictionary items but cannot get them to do anything.

For example, in a record

<1,1> = A
<1,2> = B
<2,1> = Apple
<2,2> = Banana

I created 3 dictionary items. LETTER and FRUIT, COMBO as follows

LETTER:

<1> = D
<2> = 1
<3> = 
<3> = Letter
<4> = 6L
<5> = M
<6> = COMBO

FRUIT:

<1> = D
<2> = 1
<3> = 
<3> = Letter
<4> = 6L
<5> = M
<6> = COMBO

COMBO:

<1> = PH
<2> = LETTER FRUIT

Doing a LIST LETTER FRUIT or LIST COMBO has no difference to when LETTER and FRUIT do not have an association declared in 6.

At this point I thought it might group multivalues together when SELECTing so I created another record as such:

<1,1> = A
<1,2> = B
<2,1> = Banana
<2,2> = Apple

Doing SELECT MyFile WITH LETTER = “A” and FRUIT = “Apple” selects both records, so that cannot be it either.

I then tried changing LETTER to be:

<1> = I
<2> = EXTRACT(@RECORD,1,@NV,1);EXTRACT(FRUIT,1,@NV,1);@1:" (":@2:")" : @NS
<3> = 
<3> = Letter
<4> = 6L
<5> = M
<6> = COMBO

Hoping it that a LIST MyFile LETTER would bring back all the different letters with their associated fruit in parentheses. That didn’t work either as now LETTER only ever displayed the first Multivalue instead of all of them. For Eg:

LIST MyFile LETTER 14:05:22 26 FEB 2010 1
MyFile.... LETTER..............

RECORD2    A (Banana)1
RECORD     A (Apple)1
2 records listed

The manuals don’t go any further than saying the word “association”. Is anyone able to clarify this for me?


Solution

  • Many times NV and NS only work when using BY-EXP in your LIST or SELECT statements. You need to use modifiers that specifically look at MultiValue and SubValues.

    WHEN is one, and BY-EXP is another. There are other, but not sure what they are off the top of my head. I primarly use BY-EXP and BY-EXP-DSND.

    LIST MyFile BY-EXP LETTER = "A" BY-EXP FRUIT ="Apple" LETTER FRUIT LETTER.COMBO
    

    To bring back all the combinations, you use need to do the following:

    LIST MyFile BY-EXP LETTER LETTER FRUIT LETTER.COMBO
    

    Change the following virtual field from 'LETTER' to say 'LETTER.COMBO' or something along those lines:

    <1> = I    
    <2> = EXTRACT(@RECORD,1,@NV,1);EXTRACT(FRUIT,1,@NV,1);@1:" (":@2:")" : @NS    
    <3> =     
    <3> = Letter    
    <4> = 6L    
    <5> = M    
    <6> = COMBO  
    

    Hope that helps.

    -Nathan