Страницы: 1
RSS
DAX: вычислить среднее значение без учета выбросов
 
Коллеги, всем доброго дня!
Не могу найти решение для следующей задачи - требуется вычислить среднее значение в выборке без учета выбросов. Хочу сделать это расчет непосредственно в мере, без создания дополнительных вычисляемых столбцов. Метод определения выбросов я выбрал следующий: определяем 1 и 3 квартиль в выборке (Q1 и Q3). Далее определяем межквартильный размах: IQR=Q3-Q1. Ну и выброс (x): x < Q1 - 1,5*IQR или x > Q3 + 1,5*IQR. Картинка в помощь для понимания.
Проблема данного подхода: не могу найти функцию для вычисления Квартиля в DAX. Буду признателен, если кто-то поможет решить в DAX данный алгоритм или может быть предложит другой для определения выбросов.
 
Вот это и это - не то?
Изменено: PooHkrd - 23.12.2019 09:25:56
Вот горшок пустой, он предмет простой...
 
Цитата
Vladimir Chebykin написал:
или может быть предложит другой для определения выбросов.
Если значения бывают разных знаков, то лучше брать разность модулей или разность квадратов.
 
PooHkrd, спасибо. PERCENTILE.INC - вот то, что я искал (вычислить нужный квартиль). Осталось завернуть это в меру! Буду пробовать.
 
Получилось,вот такая мера в итоге:
Код
var Q1 = CALCULATE(PERCENTILE.INC([время прихода];0,25);ALL('Таблица1'[дата]))
var Q3 = CALCULATE(PERCENTILE.INC([время прихода];0,75);ALL('Таблица1'[дата]))
var IQR = Q3 - Q1
return
AVERAGEX(
   SUMMARIZE('Таблица1';
      'Таблица1'[время прихода];
      "время";
      IF(
         OR('Таблица1'[время прихода]<Q1-1,5*IQR;
         'Таблица1'[время прихода]>Q3+1,5*IQR);
         FALSE();
         'Таблица1'[время прихода])
      );
   [время]
   )


Если у кого-то есть альтернативные решения, буду рад изучить их.
 
А вычисление МЕДИАНЫ разве не тоже самое делает? Почему именно через квартили?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, здравствуйте. Если просто считать медиану без всяких квартилей и прочего - тоже вариант. Но такой метод дает больше отклонений от реальной картины при небольших выборках данных. Поэтому среднее без учет выбросов мне более подходит. Вернее дает более точный статистический результат.
 
Коллеги, добрый день.
Подскажите, как доработать данную меру, чтобы рассчитать показатель, допустим, в разрезе сотрудников?
То есть в таблицу исходных данных добавится еще один столбец "сотрудник" и необходимо все переменные рассчитать только с учетом его истории по времени прихода:

var Q1 = CALCULATE(PERCENTILE.INC([время прихода];0,25);ALL('Таблица1'[дата]))
var Q3 = CALCULATE(PERCENTILE.INC([время прихода];0,75);ALL('Таблица1'[дата]))
var IQR = Q3 - Q1
return
AVERAGEX(
  SUMMARIZE('Таблица1';
     'Таблица1'[время прихода];
     "время";
     IF(
        OR('Таблица1'[время прихода]<Q1-1,5*IQR;
        'Таблица1'[время прихода]>Q3+1,5*IQR);
        FALSE();
        'Таблица1'[время прихода])
     );
  [время]
  )
Страницы: 1
Наверх