Переключите скидку DAX на основе накопленной меры - PullRequest
0 голосов
/ 12 сентября 2018

У меня немного трудное время, чтобы обдумать это. У меня есть совокупная сумма, основанная на часах, и мне нужно рассчитать скидку. Здесь правило состоит в том, что после того, как общая сумма превысит сумму, измените процент скидки (10%, 15%). Независимо от того, как я это делаю, я получаю неправильный итог или неправильный процент.

Вот мой неудачный подход:

+------------+-------------+------------+
| Day        | BilledHours | LaborPrice |
+------------+-------------+------------+
| 07/01/2018 | 98          | 13000      |
+------------+-------------+------------+
| 07/02/2018 | 89          | 12000      |
+------------+-------------+------------+
| 07/03/2018 | 80          | 11000      |
+------------+-------------+------------+
| 07/04/2018 | 92          | 9000       |
+------------+-------------+------------+
| 07/05/2018 | 52          | 8000       |
+------------+-------------+------------+
| 07/06/2018 | 73          | 7000       |
+------------+-------------+------------+
| 07/07/2018 | 82          | 11000      |
+------------+-------------+------------+


Cumulative Hours = 
CALCULATE(
    SUM(Rebates[BilledHours]),
    FILTER(
        ALL(Rebates[Day]),
        Rebates[Day]<=MAX(Rebates[Day]))
        )

Rebate = 
SUMX(Rebates,
    SWITCH(
        TRUE(),
        [Cumulative Hours]<=400,Rebates[LaborPrice] * 0.10,
        [Cumulative Hours]>=401,Rebates[LaborPrice] * 0.15)
        )

enter image description here

Как мне получить правильную скидку и общую сумму? Если я использую ПЕРЕКЛЮЧАТЕЛЬ перед суммой, я получаю неправильную сумму (так как сумма всегда> 400).

1 Ответ

0 голосов
/ 12 сентября 2018

Сначала измените свою меру для Совокупных часов следующим образом:

Cumulative Hours =
CALCULATE (
    SUM ( Rebates[BilledHours] ),
    FILTER ( ALL ( Rebates ), Rebates[Day] <= MAX ( Rebates[Day] ) )
)

Во-вторых, измените показатель скидки:

Rebate =
SUMX (
    Rebates,
    VAR Cumulative_Hours = [Cumulative Hours]
    RETURN
        SWITCH (
            TRUE (),
            Cumulative_Hours <= 400, Rebates[LaborPrice] * 0.1,
            Cumulative_Hours >= 401, Rebates[LaborPrice] * 0.15
        )
)

Результат: enter image description here

Почему ваша формула не работает:

Создайте простой тестовый показатель и визуализируйте его:

   Wrong Rebate Hours = SUMX( Rebates, [Cumulative Hours])

enter image description here

Легко видеть, что в SUMX нет «накопления» - [Cumulative Hours] перестает быть кумулятивным, и в результате ваш SWITCH-тест всегда <400. По сути, SUMX изменяет контекст фильтра [Совокупные часы] измеряют путем введения контекста строки из Rebates (через «переход контекста» - поиск концепции в Google).</p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...