DAX "Дни в наличии" со стола движения акций - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь подсчитать количество «дней на складе» для каждого товара в инвентаре. В качестве источника данных у меня есть специальная таблица Calendar и таблица Stock Movement, содержащая записи только за те дни, когда движение действительно происходило (не каждый день). Между таблицами есть связь.

Используя приведенный ниже код, я попытался создать альтернативу «левое соединение» в DAX и сосчитать строки после. Результат не имеет смысла.

Мне нужно получить количество дней, в которых QTY > 0 с начала года, включая дни без движения. «Вычислить» включено для переноса контекста строки (Модель, Ветвь, ...) в показатель.

days in stock =
VAR StockPerDay =
    ADDCOLUMNS (
        'Calendar';
        "DailyQty"; CALCULATE (
            SUM ( StockMovement[qty] );
            StockMovement[Date] <= EARLIER ( 'Calendar'[Date] )
        )
    )
RETURN
    COUNTROWS ( FILTER ( StockPerDay; [DailyQty] > 0 ) )

Данные в таблице движения запаса выглядят следующим образом:

sample stock movement

Я новичок в DAX, поэтому любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 02 июля 2019

Я пришел к решению, которое, надеюсь, работает для меня.Огромное спасибо @Alexis Olson за редактирование моего грязного кода, он заставил меня по-новому взглянуть.

DaysInStock :=
VAR StockPerDay =
    CALCULATETABLE (
        ADDCOLUMNS (
            'Calendar';
            "DailyQty"; SUMX (
                FILTER ( StockMovement; StockMovement[Date] <= 'Calendar'[Date] );
                StockMovement[QTY]
            )
        );
        'Calendar'[Date]
            <= TODAY () - 1
    )
VAR NoOfDays =
    COUNTROWS ( FILTER ( StockPerDay; [DailyQty] > 0 ) )
VAR DateLimit =
    DATE ( YEAR ( TODAY () ); 1; 15 )
RETURN
    IF (
        NoOfDays >= DATEDIFF ( DateLimit; TODAY (); DAY );
        TODAY () - DateLimit;
        NoOfDays
    )

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

...