Forum Discussion

the_pan_zone's avatar
the_pan_zone
New Contributor
4 years ago

How to get value based on a incoming document

Hi, I have the below input data

AccountName,AccountID,PAccountID
Abc,5467,6000
dsd,6000,7000
dfghyh,7000,5467

In the output I want the Parent account name based on the input so the output will be like

AccountName,AccountID,PAccountID, PAccountName
Abc,5467,6000,dsd
dsd,6000,7000,dfghyh
dfghyh,7000,5467,Abc

Please help me how can I achieve that?

10 Replies

  • In the above json content, child appears to be before parent. So we can use Script snap to solve this. We have to cache all the documents. Once all the input docs are received then we can write to the output view as desired.

  • bojanvelevski's avatar
    bojanvelevski
    Valued Contributor

    Hey @the_pan_zone,

    Here’s a pipeline that does exactly what you need:

    Inherit Parent AccountName_2021_12_01.slp (5.7 KB)

    If by any means, there is a mistake in your CSV sample, because as @smudassir said, the child appears before the parent, and you need it other way around, than you need to change the Mapper expression to :

    $input0.map((x,index)=> index == 0 ? x.extend({"PAccountName":$input0[$input0.length -1].AccountName}) : x.extend({"PAccountName":$input0[index-1].AccountName}))

    Regards,

      • the_pan_zone's avatar
        the_pan_zone
        New Contributor

        Hi @bojanvelevski ,

        If I add one more row and change the source data
        AccountName,AccountID,PAccountID
        Abc,5467,6000
        dsd,6000,7000
        dfghyh,7000,5467
        new,5000,5467

        This time the code is not working

  • Hi @bojanvelevski ,

    Please check the 3rd row in your result set.
    Here PAccountName should be ABC instead of “new”. PAccountName should not be the next one it should depend on PAccountID. As PAccountId is same for both 3rd and 4th row so PAccountName should be also same i.e. Abc for both 3rd and 4th Row.

    • bojanvelevski's avatar
      bojanvelevski
      Valued Contributor

      Ah, this clarifies things. It was a misunderstanding, the expression you need to use is the following:

      $input0.map((x,index)=> x.extend({"PAccountName":$input0.filter(y=>y.AccountID == x.PAccountID)[0].AccountName}))

  • Hi @bojanvelevski ,

    if I change the source and put a null in one row
    AccountName,AccountID,PAccountID
    Abc,5467,6000
    dsd,7000,6000
    dfghyh,6000,‘’
    new,5000,5467

    I am getting the following error in the expression
    Failure: Cannot access element 0 of ‘$input0.filter(y=>y.AccountID == x.PAccountID)’, which is empty, Reason: Index was out-of-bounds, Resolution: Please check expression syntax and data types.

    Expected output should be if there is not parent ID then there will be no parent name corresponding that row.
    Can you please let me know if we can use any null handling here

  • bojanvelevski's avatar
    bojanvelevski
    Valued Contributor

    Update the expression:

    $input0.map((x,index)=> x.PAccountID == null || x.PAccountID == "" || x.PAccountID == "null" ? x : x.extend({"PAccountName":$input0.filter(y=>y.AccountID == x.PAccountID)[0].AccountName}))