Forum Discussion

AndreDeLange's avatar
AndreDeLange
Helper II
2 years ago

DAX code to selectively pull forward quantities from future months to meet MOQ

For context, it is about ordering stock from multiple factories, where each has its own Minimum Order Quantity (MOQ) by Item Number. Each order may be split to go to different sites, as long as the total MOQ is met. I only need to calculate the order requirements for one selected month, which I can manipulate using a slicer.

 

I have an existing DAX model with four tables. I will number the Tables and then list the important columns under each, along with the data type in brackets, and will indicate relationships from the main fact table next to the applicable column name.


1. Dimension:
-Company Code (text)

-Inventory Site Code (text)

-Item Number (text)

-Variant (text)

-Multiple Quantity (integer)

-DimKey (text)

 

2. Vendors:

-Vendor (text)

-MOQ by Item (integer)

-VendorKey (text)

 

3. Calendar:

-Yearmonth (integer)

-YMIndex (integer)

 

4. Summary:

-PO/RB (text)

-Yearmonth (integer), with a relationship to the Yearmonth column in the Calendar table

-DimKey (text), with a relationship to the DimKey column in the Dimension table

-VendorKey (text), with a relationship to the Vendors table

-Qty (integer)

 

I then have the following existing measure: [Qty] = CALCULATE(SUM(Summary[Qty]))

 

I need help with writing a new measure that will calculate how much of the Qty I need to bring into the current month from future Yearmonth values for a particular Item Number but across all the other column values in the Dimension table (i.e. ALLEXCEPT Dimension[Item Number]), to the extent that I can make up a certain MOQ for an item - let's say that value is 500. So in the example above, I need to pull forward requirements out to 202403 to achieve the MOQ value.

There's a further complication, in that I want to pull forward only as much as I need to achieve the 500 target, provided that all the quantities I order are divisible by the Multiple Quantity column in the Dimension table. That is, if pulling forward requirements out to 202402 gave me 450 but adding 202403 gave me 600, I need to trim down the total number I'm pulling forward in a representative cut across all the variants from the 202403 value to get the total as close to 500 as possible, while meeting MOQ and each line needs to be divisible by the Multiple Quantity for the DimKey being evaluated.

1 Reply

  • Sample data from 'Calendar' table:

    Yearmonth

    YMIndex

    202312

    1

    202401

    2

    202402

    3

    202403

    4

    202404

    5

    202405

    6

    202406

    7

    202407

    8

     

    Sample data in 'Vendors' table:

    Vendor

    MOQ by Item

    VendorKey

    Vendor 1

    500

    V1

    Vendor 2

    200

    V2

     

    Sample data in 'Summary' table:

    DimKey

    Yearmonth

    Qty

    VendorKey

    Site1AAAT

    202402

    16

    V1

    Site1AAAT

    202403

    16

    V1

    Site1AAAT

    202404

    8

    V1

    Site1AAAT

    202405

    16

    V1

    Site1AAAT

    202406

    16

    V1

    Site1AAAT

    202407

    8

    V1

    Site1AAAW

    202402

    32

    V1

    Site1AAAW

    202403

    24

    V1

    Site1AAAW

    202404

    32

    V1

    Site1AAAW

    202405

    32

    V1

    Site1AAAW

    202406

    24

    V1

    Site1AAAW

    202407

    16

    V1

    Site1AAASQ

    202312

    8

    V1

    Site1AAASQ

    202401

    24

    V1

    Site1AAASQ

    202402

    32

    V1

    Site1AAASQ

    202403

    40

    V1

    Site1AAASQ

    202404

    32

    V1

    Site1AAASQ

    202405

    40

    V1

    Site1AAASQ

    202406

    32

    V1

    Site1AAASQ

    202407

    24

    V1

    Site1AAAL

    202312

    8

    V1

    Site1AAAL

    202401

    24

    V1

    Site1AAAL

    202402

    24

    V1

    Site1AAAL

    202403

    32

    V1

    Site1AAAL

    202404

    32

    V1

    Site1AAAL

    202405

    32

    V1

    Site1AAAL

    202406

    24

    V1

    Site1AAAL

    202407

    24

    V1

    Site1AAALW

    202401

    16

    V1

    Site1AAALW

    202402

    16

    V1

    Site1AAALW

    202403

    24

    V1

    Site1AAALW

    202404

    24

    V1

    Site1AAALW

    202405

    24

    V1

    Site1AAALW

    202406

    16

    V1

    Site1AAALW

    202407

    8

    V1

    Site1AAAPR

    202406

    8

    V1

    Site1AAAG

    202401

    16

    V1

    Site1AAAG

    202402

    16

    V1

    Site1AAAG

    202403

    16

    V1

    Site1AAAG

    202404

    16

    V1

    Site1AAAG

    202405

    24

    V1

    Site1AAAG

    202406

    16

    V1

    Site1AAAG

    202407

    8

    V1

    Site1AAARK

    202405

    8

    V1

    Site1AAARK

    202406

    8

    V1

    Site1AAAZ

    202402

    16

    V1

    Site1AAAZ

    202403

    24

    V1

    Site1AAAZ

    202404

    16

    V1

    Site1AAAZ

    202405

    24

    V1

    Site1AAAZ

    202406

    16

    V1

    Site1AAAZ

    202407

    8

    V1

    Site1AAAJ

    202407

    8

    V1

    Site1AAAFW

    202403

    8

    V1

    Site1AAAFW

    202404

    16

    V1

    Site1AAAFW

    202405

    16

    V1

    Site1AAAFW

    202406

    8

    V1

    Site1AAAFW

    202407

    8

    V1

    Site1AAAK

    202403

    8

    V1

    Site1AAAK

    202405

    8

    V1

    Site1AAAK

    202407

    8

    V1

    Site1AAAMB

    202401

    8

    V1

    Site1AAAMB

    202402

    8

    V1

    Site1AAAMB

    202403

    16

    V1

    Site1AAAMB

    202404

    8

    V1

    Site1AAAMB

    202405

    16

    V1

    Site1AAAMB

    202406

    16

    V1

    Site1AAAMB

    202407

    8

    V1

    Site1AAAEQ

    202401

    8

    V1

    Site1AAAEQ

    202402

    8

    V1

    Site1AAAEQ

    202404

    8

    V1

    Site1AAAEQ

    202405

    8

    V1

    Site1AAAEQ

    202406

    8

    V1

    Site2AAAT

    202407

    8

    V1

    Site2AAAWZ

    202405

    8

    V1

    Site2AAAWZ

    202407

    8

    V1

    Site2AAAW

    202405

    8

    V1

    Site2AAAW

    202407

    16

    V1

    Site2AAAD

    202406

    8

    V1

    Site2AAAD

    202407

    24

    V1

    Site2AAASQ

    202405

    16

    V1

    Site2AAASQ

    202406

    8

    V1

    Site2AAASQ

    202407

    24

    V1

    Site2AAAXE

    202405

    8

    V1

    Site2AAAXE

    202406

    16

    V1

    Site2AAAXE

    202407

    16

    V1

    Site2AAAL

    202405

    8

    V1

    Site2AAAL

    202406

    8

    V1

    Site2AAAL

    202407

    24

    V1

    Site2AAAC

    202405

    8

    V1

    Site2AAAC

    202406

    8

    V1

    Site2AAAC

    202407

    16

    V1

    Site2AAALW

    202405

    8

    V1

    Site2AAALW

    202406

    8

    V1

    Site2AAALW

    202407

    24

    V1

    Site2AAAPR

    202405

    16

    V1

    Site2AAAPR

    202406

    8

    V1

    Site2AAAPR

    202407

    16

    V1

    Site2AAAG

    202405

    8

    V1

    Site2AAAG

    202406

    16

    V1

    Site2AAAG

    202407

    24

    V1

    Site2AAARK

    202402

    8

    V1

    Site2AAARK

    202403

    8

    V1

    Site2AAARK

    202405

    16

    V1

    Site2AAARK

    202406

    16

    V1

    Site2AAARK

    202407

    16

    V1

    Site2AAAZ

    202403

    8

    V1

    Site2AAAZ

    202405

    16

    V1

    Site2AAAZ

    202406

    16

    V1

    Site2AAAZ

    202407

    24

    V1

    Site2AAAJ

    202405

    16

    V1

    Site2AAAJ

    202406

    16

    V1

    Site2AAAJ

    202407

    24

    V1

    Site2AAAFW

    202405

    8

    V1

    Site2AAAFW

    202406

    16

    V1

    Site2AAAFW

    202407

    24

    V1

    Site2AAAK

    202407

    16

    V1

    Site2AAAMB

    202406

    8

    V1

    Site2AAAMB

    202407

    16

    V1

    Site2AAAEQ

    202407

    8

    V1

     

    Sample data in 'Dimension' table:

    Item Number

    Inventory Site Code

    Variant

    Multiple Quantity

    AAA

    Site1

    T

    8

    AAA

    Site1

    W

    8

    AAA

    Site1

    SQ

    8

    AAA

    Site1

    L

    8

    AAA

    Site1

    LW

    8

    AAA

    Site1

    PR

    8

    AAA

    Site1

    G

    8

    AAA

    Site1

    RK

    8

    AAA

    Site1

    Z

    8

    AAA

    Site1

    J

    8

    AAA

    Site1

    FW

    8

    AAA

    Site1

    K

    8

    AAA

    Site1

    MB

    8

    AAA

    Site1

    EQ

    8

    AAA

    Site2

    T

    8

    AAA

    Site2

    WZ

    8

    AAA

    Site2

    W

    8

    AAA

    Site2

    D

    8

    AAA

    Site2

    SQ

    8

    AAA

    Site2

    XE

    8

    AAA

    Site2

    L

    8

    AAA

    Site2

    C

    8

    AAA

    Site2

    LW

    8

    AAA

    Site2

    PR

    8

    AAA

    Site2

    G

    8

    AAA

    Site2

    RK

    8

    AAA

    Site2

    Z

    8

    AAA

    Site2

    J

    8

    AAA

    Site2

    FW

    8

    AAA

    Site2

    K

    8

    AAA

    Site2

    MB

    8

    AAA

    Site2

    EQ

    8