Aggregate volume with irregular product hierarchy in arangodb AQL









up vote
0
down vote

favorite












I would like to aggregate invoice volume up the product hierarchy. However, the hierarchy does not have the same number of levels for all products. For example the following are the hierarchies of two products:



Prod1 (SKU) <- Hierarchy Level (HL) 5 <- HL 4 <- HL 3 <- HL 2 <- HL 1
Prod2 (SKU) <- HL 3 <- HL 2 <- HL 1


All products have level 3 and above, but may have multiple levels between level 3 and sku (Hierarchy can have up to 8 levels total including sku).



The current DB model for the invoices looks like this:



Customer <-IsBilled-- Invoice --containsProd-> product <- IsParentOf-- product


The following query does the aggregation nicely, but it relies in a fixed number of edge hops



for v,e,p in 1..4 INBOUND 'customer/A'
IsBilled, OUTBOUND containsProd, isParentOf
filter p.edges[0]._from == 'invoice/541280' //limit data to a single invoice
collect vname = p.vertices[4].name, vlevel = p.vertices[4].hierarchyLevel
AGGREGATE qtySum = sum( p.edges[1].quantity ) //aggregates two levels up in the product hierarchy (hops 1 and 2 get from customer to invoice to product)
filter vname != null. //remove vertices that are not products
return Product: vname, hierarchyLevel: vlevel, qty:qtySum


The statement above gets data like:



Product hierarchyLevel qty 
PrdA HL 4 20
PrdB HL 2 30


Is it possible instead to get the data at level 3 for all products (since that is a common level)? I am guessing there would need to be a change to the aggregation logic, but not sure how.










share|improve this question

























    up vote
    0
    down vote

    favorite












    I would like to aggregate invoice volume up the product hierarchy. However, the hierarchy does not have the same number of levels for all products. For example the following are the hierarchies of two products:



    Prod1 (SKU) <- Hierarchy Level (HL) 5 <- HL 4 <- HL 3 <- HL 2 <- HL 1
    Prod2 (SKU) <- HL 3 <- HL 2 <- HL 1


    All products have level 3 and above, but may have multiple levels between level 3 and sku (Hierarchy can have up to 8 levels total including sku).



    The current DB model for the invoices looks like this:



    Customer <-IsBilled-- Invoice --containsProd-> product <- IsParentOf-- product


    The following query does the aggregation nicely, but it relies in a fixed number of edge hops



    for v,e,p in 1..4 INBOUND 'customer/A'
    IsBilled, OUTBOUND containsProd, isParentOf
    filter p.edges[0]._from == 'invoice/541280' //limit data to a single invoice
    collect vname = p.vertices[4].name, vlevel = p.vertices[4].hierarchyLevel
    AGGREGATE qtySum = sum( p.edges[1].quantity ) //aggregates two levels up in the product hierarchy (hops 1 and 2 get from customer to invoice to product)
    filter vname != null. //remove vertices that are not products
    return Product: vname, hierarchyLevel: vlevel, qty:qtySum


    The statement above gets data like:



    Product hierarchyLevel qty 
    PrdA HL 4 20
    PrdB HL 2 30


    Is it possible instead to get the data at level 3 for all products (since that is a common level)? I am guessing there would need to be a change to the aggregation logic, but not sure how.










    share|improve this question























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I would like to aggregate invoice volume up the product hierarchy. However, the hierarchy does not have the same number of levels for all products. For example the following are the hierarchies of two products:



      Prod1 (SKU) <- Hierarchy Level (HL) 5 <- HL 4 <- HL 3 <- HL 2 <- HL 1
      Prod2 (SKU) <- HL 3 <- HL 2 <- HL 1


      All products have level 3 and above, but may have multiple levels between level 3 and sku (Hierarchy can have up to 8 levels total including sku).



      The current DB model for the invoices looks like this:



      Customer <-IsBilled-- Invoice --containsProd-> product <- IsParentOf-- product


      The following query does the aggregation nicely, but it relies in a fixed number of edge hops



      for v,e,p in 1..4 INBOUND 'customer/A'
      IsBilled, OUTBOUND containsProd, isParentOf
      filter p.edges[0]._from == 'invoice/541280' //limit data to a single invoice
      collect vname = p.vertices[4].name, vlevel = p.vertices[4].hierarchyLevel
      AGGREGATE qtySum = sum( p.edges[1].quantity ) //aggregates two levels up in the product hierarchy (hops 1 and 2 get from customer to invoice to product)
      filter vname != null. //remove vertices that are not products
      return Product: vname, hierarchyLevel: vlevel, qty:qtySum


      The statement above gets data like:



      Product hierarchyLevel qty 
      PrdA HL 4 20
      PrdB HL 2 30


      Is it possible instead to get the data at level 3 for all products (since that is a common level)? I am guessing there would need to be a change to the aggregation logic, but not sure how.










      share|improve this question













      I would like to aggregate invoice volume up the product hierarchy. However, the hierarchy does not have the same number of levels for all products. For example the following are the hierarchies of two products:



      Prod1 (SKU) <- Hierarchy Level (HL) 5 <- HL 4 <- HL 3 <- HL 2 <- HL 1
      Prod2 (SKU) <- HL 3 <- HL 2 <- HL 1


      All products have level 3 and above, but may have multiple levels between level 3 and sku (Hierarchy can have up to 8 levels total including sku).



      The current DB model for the invoices looks like this:



      Customer <-IsBilled-- Invoice --containsProd-> product <- IsParentOf-- product


      The following query does the aggregation nicely, but it relies in a fixed number of edge hops



      for v,e,p in 1..4 INBOUND 'customer/A'
      IsBilled, OUTBOUND containsProd, isParentOf
      filter p.edges[0]._from == 'invoice/541280' //limit data to a single invoice
      collect vname = p.vertices[4].name, vlevel = p.vertices[4].hierarchyLevel
      AGGREGATE qtySum = sum( p.edges[1].quantity ) //aggregates two levels up in the product hierarchy (hops 1 and 2 get from customer to invoice to product)
      filter vname != null. //remove vertices that are not products
      return Product: vname, hierarchyLevel: vlevel, qty:qtySum


      The statement above gets data like:



      Product hierarchyLevel qty 
      PrdA HL 4 20
      PrdB HL 2 30


      Is it possible instead to get the data at level 3 for all products (since that is a common level)? I am guessing there would need to be a change to the aggregation logic, but not sure how.







      arangodb aql






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 8 at 22:47









      camba1

      1296




      1296



























          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function ()
          StackExchange.using("externalEditor", function ()
          StackExchange.using("snippets", function ()
          StackExchange.snippets.init();
          );
          );
          , "code-snippets");

          StackExchange.ready(function()
          var channelOptions =
          tags: "".split(" "),
          id: "1"
          ;
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function()
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled)
          StackExchange.using("snippets", function()
          createEditor();
          );

          else
          createEditor();

          );

          function createEditor()
          StackExchange.prepareEditor(
          heartbeatType: 'answer',
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader:
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          ,
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          );



          );













           

          draft saved


          draft discarded


















          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53217304%2faggregate-volume-with-irregular-product-hierarchy-in-arangodb-aql%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown






























          active

          oldest

          votes













          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes















           

          draft saved


          draft discarded















































           


          draft saved


          draft discarded














          StackExchange.ready(
          function ()
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53217304%2faggregate-volume-with-irregular-product-hierarchy-in-arangodb-aql%23new-answer', 'question_page');

          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

          Edmonton

          Crossroads (UK TV series)