Категоризация последовательных месяцев с нулевыми значениями в ведрах - PullRequest
0 голосов
/ 01 ноября 2018

Я построил модель данных для использования для парка моей компании в PowerQuery. У нас есть ряд различных столбцов в модели данных. В частности, пробег, VIN, начальная и конечная даты (см., Например, таблицу).

Mileage | VIN | Start Date | End Date |
0       | 123 | 6/1/18     | 6/30/18  |
0       | 123 | 7/1/18     | 7/31/18  |
0       | 123 | 8/1/18     | 8/31/18  |
0       | 123 | 9/1/18     | 9/30/18  |
0       | 123 | 10/1/18    | 10/31/18 |

Что я пытаюсь сделать, так это если пробег равен 0 за один месяц, он классифицируется как сегмент с пометкой 0-30 дней, если пробег равен 0 за два месяца подряд, он классифицируется как 31-60 дней и пробег 0 более 3 месяцев подряд будет классифицирован как> 60 дней. Из приведенного выше примера этот автомобиль будет отнесен к категории «> 60 дней». Есть ли простой способ сделать это в модели данных с использованием DAX? Пожалуйста, дайте мне знать, если у вас есть дополнительные вопросы. Спасибо!

1 Ответ

0 голосов
/ 02 ноября 2018

Попробуйте это как вычисляемый столбец:

Buckets =
VAR rowDate = 'myTable'[ Start Date ]
VAR previousDate =
    CALCULATE (
        MAX ( 'myTable'[ Start Date ] ),
        FILTER (
            ALLEXCEPT ( myTable, myTable[ VIN ] ),
            'myTable'[ Start Date ] < rowDate
        )
    )
VAR prePreviousDate =
    CALCULATE (
        MAX ( 'myTable'[ Start Date ] ),
        FILTER (
            ALLEXCEPT ( myTable, myTable[ VIN ] ),
            'myTable'[ Start Date ] < previousDate
        )
    )
VAR PreviousMileage =
    CALCULATE (
        MAX ( 'myTable'[Mileage ] ),
        ALLEXCEPT ( 'myTable', 'myTable'[ VIN ] ),
        'myTable'[ Start Date ] = previousDate
    )
VAR PrePreviousMileage =
    CALCULATE (
        MAX ( 'myTable'[Mileage ] ),
        ALLEXCEPT ( 'myTable', 'myTable'[ VIN ] ),
        'myTable'[ Start Date ] = prePreviousDate
    )
RETURN
    SWITCH (
        TRUE (),
        'myTable'[Mileage ] + IF ( ISBLANK ( PreviousMileage ), 1, PreviousMileage )
            + IF ( ISBLANK ( PrePreviousMileage ), 1, PrePreviousMileage )
            = 0, "> 60 Days",
        'myTable'[Mileage ] + IF ( ISBLANK ( PreviousMileage ), 1, PreviousMileage )
            = 0, "31 to 60 Days",
        'myTable'[Mileage ] = 0, "0 to 30 Days",
        "No Days"
    )

Результат выглядит следующим образом. Я добавил несколько значений для тестирования.

enter image description here

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