Страницы: 1
RSS
Подмена данных по нескольким условиям в PowerPivot, Подмена данных по нескольким условиям в PowerPivot
 
Пишу систему мотивации персонала. Периодически случается такая ситуация, что некий сотрудник со своим идентификационным кодом EMPLOYEE_ID, переходит с должности POSITION ID  "Стажер" в должность "Продавец" в середине месяца. Этот факт регистрируется сменой идентификатора  POSITION ID  с "18" на "2"
И сразу меняются порядка десяти факторов расчета, связанные с должностью. Я не могу их не усреднить, ни сложить впоследствии. Вижу выход в том, чтобы внутри месяца отслеживать изменение POSITION ID  с "18" на "2". И, если данный факт был, то заменить внутри месяца все "18" на "2" только по конкретному сотруднику EMPLOYEE_ID.
Возможно такое реализовать?
 
Доброе время суток
Вариант
 

Андрей, большое спасибо.НО... В Вашем примере все работает.  А когда я перенес вашу формулу простым копированием в свою базу, с  совершенно идентичными полями, все работать перестало. И в бубен стучал, и в рельсу. Не работает. Заменило всем POSITION ID на "2". Игнорируя все установки.
Второй момент. В формуле не учтен EMPLOYEE_ID. В тебеле, одномоментно, находится около 700 человек. И идут они вперемешку. Кто как табель заполняет.
Третье, это я упустил, есть 10 магазинов. характеризующихся признаком COMPANY_ID.
Попытался я добавить в  вашу формулу фильтры EMPLOYEE_ID и COMPANY_ID. У меня всегда получалось в аналогичном синтаксисе, типа:
FILTER('DTable'; 'DTable'[EMPLOYEE_ID] = EARLIER('DTable'[EMPLOYEE_ID])) и FILTER('DTable'; 'DTable'[COMPANY_ID] = EARLIER('DTable'[COMPANY_ID]));
Но здесь не прошло. Как заколдовано. Я что то сделал не так?
Приложил оригинал базы с двумя магазинами и Вашей формулой. На всякий случай - в вашем примере EMPLOYEE_ID  = 245 420

 
Алексей, так надо?
Код
=Var positions = SUMMARIZE(FILTER('DTable'; 'DTable'[Месяц] = EARLIER('DTable'[Месяц]) && 'DTable'[EMPLOYEE_ID] = EARLIER('DTable'[EMPLOYEE_ID])); 'DTable'[POSITION_ID])
Return IF(COUNTROWS(positions) > 1; 2; positions)

Если нужно добавить условие в фильтр, то оператры в DAX соответствуют таким функциям
&& = И()
|| = ИЛИ()
Да и функции AND/OR никто не отменял, но ими не очень удобно пользоваться, т.к. они берут только 2 аргумента.
Изменено: PooHkrd - 26.06.2019 12:02:51
Вот горшок пустой, он предмет простой...
 
Да. Сработало. А чем Ваша конструкция  && 'DTable'[EMPLOYEE_ID] = EARLIER('DTable'[EMPLOYEE_ID])) отличается от моей FILTER('DTable'; 'DTable'[EMPLOYEE_ID] = EARLIER('DTable'[EMPLOYEE_ID])) и можно ли таким же образом  добавить && 'DTable'[COMPANY_ID] = EARLIER('DTable'[COMPANY_ID]))?
 
Алексей Рубцов, тем, что для SUMMARIZE вы можете указать только одну таблицу, которую ему нужно агрегировать, т.е. функция FILTER выдает на выходе таблицу, которая потом агрегируется. Т.е. функция от вас во втором аргумента ждала столбец, по которому агрегировать, а вы ей подсунули еще одну таблицу - вот и ругается. Если вы хотите перечислять фильтры, то для этого нужно использовать CALCULATETABLE, там можно перечислять фильтры так, как вы указали.
Цитата
Алексей Рубцов написал:
и можно ли таким же образом  добавить
А попробовать?  ;)
Изменено: PooHkrd - 26.06.2019 12:08:46
Вот горшок пустой, он предмет простой...
 
Попробовал. Работает. Но надо еще смоделировать реальную ситуацию. Я настроил чертовски многогранную мотивацию персонала, но постоянно находятся умники, которые создают совершенно невозможные варианты своей деятельности, от которых я просто шалею.
 
Алексей Рубцов, если значения данного столбца использоваться как измерения и фильтры в отчете не планируется, то рекомендую рассчитывать этот столбец сразу в мере при помощи ADDCOLUMNS и не захламлять модель лишними столбцами.
Сам я обычно делаю столбец, потом меру на основе этого столбца, когда вижу что все работает рядом леплю меру с вирутальным столбцом, если вижу что все работает как надо, то удаляю столбец и первую меру.
Вот горшок пустой, он предмет простой...
 
прямо напрашивается Slowly Changing Dimension Type 2
PS файлы не смотрел
F1 творит чудеса
 
У меня в Pivote сидит выгрузка самописной базы Oracle 10 с продажами сети магазинов за 5 лет.  В ней, ввиду полнейшего отсутствия документации,  пришлось в сжатые сроки  делать обратный инжиниринг. А потом лепить кучу костылей под неисправляемые ошибки. У меня модель не просто захламлена лишними расчетными столбцами. Их там несколько сот в 30 мега таблицах. с многочисленным дублированием с разной математикой для перепроверки расчетов. И от фиксированных значений, я бегаю как черт от ладана. Потому как это единственная панацея отловить баг в очередной немыслимой рабочей ситуации.
Страницы: 1
Наверх