Скользящая средняя, ​​исключая выходные и праздничные дни - PullRequest
0 голосов
/ 07 декабря 2018

В настоящее время у меня есть таблица в PowerPivot, которая отслеживает количество клиентов в процессе продаж.От (по месту продажи) первого взаимодействия до взимаемой продажи.Пока что я создал скользящее среднее значение за 5 дней, которое усредняет каждую задачу.Ниже приведена формула DAX, которую я создал до сих пор, и пример таблицы.

=
CALCULATE (
    SUM ( [Daily Count] ),
    DATESINPERIOD ( Table1[Date], LASTDATE ( Table1[Date] ), -7, DAY ),
    ALLEXCEPT ( Table1, Table1[Sales Location], Table1[Group] )
)
    / 5

enter image description here

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

Например, 26.1118 (понедельник послеДень благодарения и Черная пятница) Я бы хотел усреднить пять рабочих дней, предшествующих (26.11.18, 11.11.11 / 19 и 11/16).В приведенном выше примере скользящее итоговое и среднее значение за предыдущие 5 дней должно составлять Intake = 41 (всего) 8,2 (в среднем), Appointment = 30 (всего) 6 (в среднем) и Sale = 13 (всего) и 2,6 (в среднем)).

На основании формулы в настоящее время каждое из этих чисел является неточным.Есть ли простой способ исключить эти дни?

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

Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

@ alexisolson Спасибо за ответ здесь.Я действительно смог выяснить это за выходные, но забыл закрыть ветку (извините за это! В любом случае оцените вашу помощь).Но я сделал нечто похожее на то, что вы упомянули выше.

Я создал таблицу дат (CorpCalendar), которая включала только рабочие дни.Затем я создал столбец индекса в таблице CorpCalendar, чтобы дать каждой строке уникальный номер в порядке возрастания.Оттуда я связал таблицу CorpCalendar с моей таблицей SalesData по связанным датам и использовал функцию LOOKUPVALUE, чтобы перенести значение индекса из таблицы CorpCalendar в таблицу SalesData.В отдельном столбце я вычел 4 из значения индекса даты, чтобы получить столбец корректировки индекса (для диапазона пяти дней из фактического индекса даты и корректировки ... если это имеет смысл).Затем я добавил дополнительный вспомогательный столбец LOOKUPVALUE, чтобы сопоставить столбец скорректированного индекса даты с соответствующим рабочим днем. Наконец, затем я использовал следующую функцию, чтобы получить скользящее среднее значение за 5 дней.

=CALCULATE(sum(Combined[Daily Count]),DATESBETWEEN(Combined[Date - Adjusted],Combined[Date - Adjusted (-5)],Combined[Date - Adjusted]),ALLEXCEPT(Combined,Combined[Group]))/5

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

Еще раз спасибо!

0 голосов
/ 09 декабря 2018

Для этого я бы рекомендовал использовать таблицу календаря, связанную с Table1, в столбце Date, в котором также есть столбец IsWorkday с 1, если этот день является рабочим днем, и 0 в противном случае.

Как только вы настроите эту настройку, вы можете написать меру, подобную этой:

Moving Avg =
VAR Last5Workdays =
    SELECTCOLUMNS (
        TOPN (
            5,
            FILTER (
                DateTable,
                DateTable[Date] <= EARLIER ( Table1[Date] )
                    && DateTable[IsWorkday] = 1
            ),
            DateTable[Date], DESC
        ),
        "Workday", DateTable[Date]
    )
RETURN
    CALCULATE (
        SUM ( Table1[Daily Count] ),
        Table1[Date] IN Last5Workdays
        ALLEXCEPT ( Table1, Table1[Sales Location], Table1[Group] ),
    )
        / 5

Функция TOPN возвращает здесь верхние 5 строк DateTable, где каждая строка должна бытьрабочий день, который меньше или равен дате в текущей строке Table1 (функция EARLIER ссылается на более ранний контекст строки, определяющий текущую строку).

Затем я использую SELECTCOLUMNS дляпревратить эту таблицу в список, выбрав один столбец (который я назвал Workday).Оттуда, это в основном ваша мера с фильтром даты немного изменилась.

...