Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
На что заменить функцию TOPN в Power Pivot
 
Доброго времени суток.
Есть вот такая мера, которая считает среднее значение из 5 выстроенных вряд значений.
Код
Avg5Max:=AVERAGEX(
TOPN(5;
SUMMARIZE('ПЛАН_ПРОИЗВОДСТВА'; 'Календарь'[ГГГГ-ММ]; "count sum month"; SUM('ПЛАН_ПРОИЗВОДСТВА'[Количество]));
[count sum month]; 0; 'Календарь'[ГГГГ-ММ]; 1); [count sum month])
Если для расчета я хочу отбросить 1 или 2 первых максимальных значений, то как модернизировать меру?  
 
Например по таблице, которая получается в результате TOPN взять еще раз его же только 3 элемента с обратной сортировкой.
 
звучит вроде бы логично, но не понял как вертнуть в обратную сторону..? и если ряд состоит из значений 7, 5, 0, 0, 0, то получим значение 0, а нужно 5 (т.е. до первого значения больше 0)
 
Цитата
muxey написал:
(т.е. до первого значения больше 0)
И где про это в теме или хотя бы в стартовом посте?
Давайте вы опишите задачу целиком, предложите корректное название темы, приложите пример и укажите что нужно получить в сводной. Короче все по правилам форума. А то если в каждом новом посте будут такие новости, то помогающим это быстро надоест.
 
Цитата
PooHkrd написал: Давайте вы опишите задачу целиком,
Тему почему то изменить не могу, но название лучше чем вот это, придумать не могу
"Подсчет среднего значения в выстроенном ряду начиная не с 1 значения используя функцию  TOPN"

Задача
"Как модернизировать меру, используя функцию TOPN, чтобы расчет среднего значения производился исключая 1...n значений начиная с верха ряда"

Пример выложу, как будет техническая возможность...просто на форуме столько спецов, думал "ларчик" просто открывается - подскажут просто на примере самой  меры)
 
muxey, ровно год назад мучили ваш файл, у меня он даже сохранился до сих пор)))
Например, можно вот так попробовать:
Скрытый текст


ps Что-то архивированный файл в 150кб отказался загружаться, а простой xlsx  с моделью 460кб
Изменено: StepanWolkoff - 9 Апр 2019 22:45:04
 
StepanWolkoff,
приятно, что мое "творчество" так запало в память) полученных мною знаний хватило на год модернизации файла - это заслуга форумчан - за это спасибо

не хочу слету вставлять решение в пример, есть пара вопросов для закрепления понимания примененного метода
Код
Avg5Max:=var top5=TOPN(5;
         SUMMARIZE('ПЛАН_ПРОИЗВОДСТВА'; 'Calendar'[ДАТА]; "count sum month"; SUM('ПЛАН_ПРОИЗВОДСТВА'[Количество])); 
            [count sum month]; 0; 'Calendar'[ДАТА]; 1)
var top2=TOPN(2;
         SUMMARIZE('ПЛАН_ПРОИЗВОДСТВА'; 'Calendar'[ДАТА]; "count sum month"; SUM('ПЛАН_ПРОИЗВОДСТВА'[Количество])); 
            [count sum month]; 0; 'Calendar'[ДАТА]; 1)
var topint=EXCEPT(top5;top2)
return
вот это заведение переменных в мере Avg5Max
1 - получение топ 5
2 - получение топ 2
3 - исключение из топ5 топ2
Код
AVERAGEX(
topint; [count sum month])

это вычисление среднего значения на базе переменной 3
не пойму только начала кода - зачем Except перед названием меры?
или я туплю и это новое название получившейся меры "Except Avg5Max:="
 
Конечно, это только название меры, просто чтобы её сразу отличить от остальных в модели, а то там куча копий уже было.
 
StepanWolkoff, попробовал - считает на ура, спасибо
есть еще пару вопросов

1. Есть вот такая мера, которая производит перемножение значений из двух таблиц. Нужно использовать тот же принцип - выкинуть 2 топовых значения.
Но как я не пытаюсь применить опыт из предыдущего примера - везде ошибка. Может быть это связано с введением переменных..?
Код
MINCALC:=AVERAGEX(
TOPN(5;
SUMMARIZE('ПЛАН_ПРОИЗВОДСТВА'; 'Календарь'[ГГГГ-ММ]; 'ПЛАН_ПРОИЗВОДСТВА'[Номенклатура]; "count sum month"; SUM('ПЛАН_ПРОИЗВОДСТВА'[Количество]));
[count sum month]; 0; 'Календарь'[ГГГГ-ММ]; 1); [count sum month]
* LOOKUPVALUE('СрокПоставки'[Срок];  'СрокПоставки'[Номенклатура]; 'ПЛАН_ПРОИЗВОДСТВА'[Номенклатура])) / 30

2. Если есть необходимость убрать из выстроенного ряда произвольное по номеру значение, например 2 и 4, то какая функция может быть применена?

 
задачу вроде бы решил, но осталось недопонимание
Код
MINCALC_4_1:=var top4=TOPN(4;
SUMMARIZE('ПЛАН_ПРОИЗВОДСТВА'; 'Календарь'[ГГГГ-ММ]; 'ПЛАН_ПРОИЗВОДСТВА'[Номенклатура]; "count sum month"; SUM('ПЛАН_ПРОИЗВОДСТВА'[Количество]));
[count sum month]; 0; 'Календарь'[ГГГГ-ММ]; 1)
var top1= TOPN(1;
SUMMARIZE('ПЛАН_ПРОИЗВОДСТВА'; 'Календарь'[ГГГГ-ММ]; 'ПЛАН_ПРОИЗВОДСТВА'[Номенклатура]; "count sum month"; SUM('ПЛАН_ПРОИЗВОДСТВА'[Количество]));
[count sum month]; 0; 'Календарь'[ГГГГ-ММ]; 1)
var top4_1=EXCEPT(top4;top1)
return
AVERAGEX(top4_1;[count sum month]
* LOOKUPVALUE('СрокПоставки'[Срок];  'СрокПоставки'[Номенклатура]; 'ПЛАН_ПРОИЗВОДСТВА'[Номенклатура])) / 30
почему при попытке производить умножение на столбец за пределами функции AVERAGEX все варианты приводят к ошибке?
 
Цитата
muxey написал:
умножение на столбец
на столбец умножить нельзя. Возможно, теряется наследование столбцов при сборке таблицы (т.е. в таблице top4_1 связь с родным столбцом 'ПЛАН_ПРОИЗВОДСТВА'[Номенклатура] разрывается).
Но, вы не сказали, к какой именно ошибке приводит. И без примера данных что-то делать нет смысла, а мастерить за вас его лень.
F1 творит чудеса
Страницы: 1
Читают тему (гостей: 1)
Наверх