DAX - TOPN () в SUMX () для нескольких транзакций - PullRequest
1 голос
/ 16 октября 2019

Мне нужна ваша помощь.

Я пытаюсь создать вычисляемый столбец, в котором сумма продаж за последние две даты (продажи не на всех датах!) Для каждого продукта.

Я пытался использовать расчет:

CALCULATE (
    SUMX ( TOPN ( 2; 'Table'; 'Table'[date_ID] ); 'Table'[Sale] );
    ALLEXCEPT ( Table; 'Table'[Product_ID] )
)

Но это работает, только если у вас есть одна продажа на дату для идентификатора продукта.

Что мне делать, если на дату приходится много транзакцийи идентификатор продукта?

Ниже у меня есть таблица, в которой у меня есть (отфильтрованы) одна дата и один продукт.

enter image description here

Теперь,Я создал вычисляемый столбец, который суммирует все транзакции за дату и идентификатор продукта (для справки). Это

Calculated Column 2 =
CALCULATE (
    SUMX ( Table; Table[Sale] );
    ALLEXCEPT ( Table; 'Table'[Date]; 'Table'[Product_ID] )
)

enter image description here

Теперь самое сложное. Если я хочу суммировать транзакции за последние две даты для каждого продукта, я сделал следующий расчет:

Calculated Column 1 =
VAR SumProd =
    CALCULATE (
        SUMX ( Table; Table[Sale] );
        ALLEXCEPT ( Table; Table[Date]; Table[Product_ID] )
    )
RETURN
    CALCULATE (
        SUMX ( TOPN ( 2; 'Table'; 'Table'[Date] ); SumProd );
        ALLEXCEPT ( Table; Table[Product_ID]; Table[Date] )
    )

enter image description here

Проблемы:

  1. Расчеты суммируют ВСЕ значения в каждой категории

Пример: в таблице вы видите "Calculated column 1"=7571200, что составляет 27040 * количество транзакций? Я хочу только значение 27040.

По какой-то причине TOPN () не работает. Если я изменю N_Value=2 на N_Value=3, расчет не изменится?

Пожалуйста, кто-нибудь знает, что не так с моими расчетами?

Спасибо.

Br, Jakob

1 Ответ

0 голосов
/ 16 октября 2019

По вашему показателю SumProd - это константа, которую вы суммируете для каждой строки в таблице. Это не то, что вы хотите.

Я бы предложил что-то более похожее на это:

Calculated Column 1 =
VAR LastTwoDates =
    CALCULATETABLE (
        VALUES ( Table[Date] );
        TOPN ( 2; ALLEXCEPT ( Table; Table[Product_ID] ); Table[Date] )
    )
RETURN
    CALCULATE (
        SUM ( Table[Sale] );
        ALLEXCEPT ( Table; Table[Product_ID] );
        Table[Date] IN LastTwoDates
    )

В этом мы сначала вычислим список из 2 верхних дат, связанных с Product_ID, исохранить его как переменную. Затем мы используем это в качестве фильтра при расчете суммы Sale.


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


Оказывается, мой код работал не совсем так, как задумывалось. Попробуйте вместо этого:

Calculated Column 1 =
VAR ProductDates =
    CALCULATETABLE (
        VALUES ( Table1[Date] );
        ALLEXCEPT ( Table1; Table1[Product_ID] )
    )
VAR LastTwoDates = TOPN ( 2; ProductDates; [Date] )
RETURN
    CALCULATE (
        SUM ( Table1[Sale] );
        ALLEXCEPT ( Table1; Table1[Product_ID] );
        Table1[Date] IN LastTwoDates
    )
...