DAX: выделить инвентарь для открытия заказов (дополнительная сложность) - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь выделить инвентарные позиции для открытия заказов в DAX, PowerBi. Идея состоит в том, чтобы сначала выделить весь доступный инвентарь для самого старого заказа, а затем распределить оставшийся инвентарь для второго самого старого и т. Д. c. пока инвентарь не исчерпан. Инвентарь может быть исчерпан, даже если открытый заказ не полностью удовлетворен.

Я уже задавал подобный вопрос в этом вопросе, я получил отличный ответ, и результаты были великолепны. Теперь я добавляю дополнительную сложность к вопросу о том, как решать и распределять в случае наличия нескольких клиентов или отправки в места с одинаковой датой заказа, но недостаточным количеством для выполнения нескольких заказов.

Пожалуйста, проверьте прилагаемое изображение в качестве примера для распределения ниже

Extra Complicity Allocation

Первоначальный вопрос здесь:

DAX: Распределить запас по открытым заказам

ответ на первоначальный вопрос здесь:

Inventory Allocation =
VAR TotalInventory =
    LOOKUPVALUE ( Inventory[Qty On Hand], Inventory[Item], 'Open Orders'[Item] )
VAR AlreadyOrdered =
    CALCULATE (
        SUM ( 'Open Orders'[Qty Open] ),
        ALL ( 'Open Orders' ),
        Inventory[Item] = EARLIER ( 'Open Orders'[Item] ),
        'Open Orders'[Due Date] < EARLIER ( 'Open Orders'[Due Date] )
    )
RETURN
    IF (
        AlreadyOrdered > TotalInventory,
        0,
        MIN ( 'Open Orders'[Qty Open], TotalInventory - AlreadyOrdered )
    )

1 Ответ

0 голосов
/ 08 апреля 2020

Вы можете сделать это, когда есть заказ в вашем клиенте и месте. Например, CustNr (Nr.) & Location (Alphabeti c)

Поскольку существует заказ, вы можете внести следующие изменения:

    VAR AlreadyOrdered =
        CALCULATE (
            SUM ( 'Open Orders'[Qty Open] ),
            FILTER ( 'Open Orders' ,
            Inventory[Item] = EARLIER ( 'Open Orders'[Item] ),
            'Open Orders'[Due Date] < EARLIER ( 'Open Orders'[Due Date]) &&
            Inventory[CustNr] < EARLIER (Inventory[CustNr]) &&
            Inventory[Location] < EARLIER (Inventory[Location]))
        )

Примечание. Чтобы сохранить обзор, я предлагаю не для работы с EARLIER, но вместо этого используйте переменные:

VAR curItem = Inventory[Item] 
VAR curDueDate = 'Open Orders'[Due Date]
VAR curCustNr = Inventory[CustNr]
VAR curLocation = Inventory[Location]

VAR TotalInventory =
    LOOKUPVALUE ( Inventory[Qty On Hand], curItem, 'Open Orders'[Item] )
VAR AlreadyOrdered =
        CALCULATE (
            SUM ( 'Open Orders'[Qty Open] ),
            ALL ( 'Open Orders' ),
            Inventory[Item] = curItem  ),
            'Open Orders'[Due Date] < curDueDate  &&
            Inventory[CustNr] < curCustNr  &&
            Inventory[Location] < curLocation )
        )

Важно, чтобы в ваших столбцах всегда был порядок (сортировка), иначе это не работает.

...