Страницы: 1
RSS
Сумма родителя и всех его родственников вниз, Dax Мера
 
Добрый день, прошу помощи форумчане!
Столкнулся с такой проблемой. Есть иерархия продавцов с подчинением и продажами. Цель меры в расчете суммы продаж по родителю и всех его детей,внуков, правнуков и т.д.
Условия: если выбираешь в срезе Человека А, то показывается сумма его продаж и всех, кому он является проотцом (А+Б+В+Г), если же выбрать Б - Б+В+Г и т.д.
Прикладываю пример.

П.С. Возможно я опять как китаец формирую вопрос, извините( отвечу на все вопросы.
Изменено: bereteli - 03.08.2020 10:04:51
 
Доброе время суток.
Вариант
Код
=
VAR myHi =
    VALUES ( 'Таблица1'[Иерархия] )
RETURN
    IF (
        HASONEVALUE ( 'Таблица1'[Иерархия] );
        CALCULATE (
            SUM ( 'Таблица1'[Продажи] );
            FILTER (
                ALL ( 'Таблица1'[Человек]; 'Таблица1'[Иерархия] );
                FIND ( myHi; 'Таблица1'[Иерархия]; 1; 0 ) = 1
            )
        );
        BLANK ()
    )
 
Добрый день.
Вижу тут решение через изменение структуры данных.
Поменяв представление, задача решается сама собой.
 
Цитата
Archerius написал:
Поменяв представление, задача решается сама собой.
И объём данных стал в 2,5 раза больше :)  И таблица фактов предназначена теперь только для решения этой задачи. Увы, не всё можно упростить.

Ещё вариант, если исходить, что человек уникален.
Код
=
VAR me =
    VALUES ( 'Таблица1'[Человек] )
RETURN
    IF (
        HASONEVALUE ( 'Таблица1'[Человек] );
        CALCULATE (
            SUM ( 'Таблица1'[Продажи] );
            FILTER (
                ALL ( 'Таблица1'[Человек]; 'Таблица1'[Иерархия] );
                PATHCONTAINS ( 'Таблица1'[Иерархия]; me )
            )
        );
        BLANK ()
    )
Изменено: Андрей VG - 03.08.2020 11:00:08
 
А так подойдёт?
=СУММЕСЛИ(Таблица1[Иерархия];"*"&ПРАВБ(C14)&"*";Таблица1[Продажи])
Вместо ПРАВБ() задать конкретное имя.
 
Андрей VG, Спасибо Вам огромное. Тоже думал через find делать, но не знал как это все сформировать. Если вас не затруднит вы не могли бы немного формулу расшифровать, я понимаю, что делает каждая функция, но не до конца понимаю, что она возращает.
 
Светлый, спасибо за Ваш вариант, но тут именно мера требуется)
Archerius, Ваш метод возможен, но Вы же тоже должны понимать, что наглядный пример 4 строки, в реальности строк около 100к, и Ваш метод увеличит эти 100к в нереальное количество.
Изменено: bereteli - 03.08.2020 11:43:53
 
Андрей VG, сейчас попробую такой вариант. А не подскажите как написать такую же меру, но с ограничением на количество родственников , т.е. Только Отец-Сын
 
Цитата
bereteli написал:
Ваш метод увеличит эти 100к в нереальное количество
4 или 1000К, разницы Вы не заметите. Это простейшая функция Excel. заточенная на максимальное быстродействие. Она суммирует числа из тех строк, где встречается образец, например "А". Чтобы правильно искала по критерию, к этому образцу приписываем с двух сторон "*" - любое количество любых символов. Получается критерий "*А*". Но обязательно, чтобы в иерархии были прописаны ВСЕ родители.
*Невнимательно прочитал.
Изменено: Светлый - 03.08.2020 12:42:18
 
Цитата
Светлый написал:
Только Отец-Сын
Вариант
Код
=
VAR myName =
    VALUES ( 'Таблица1'[Человек] )
VAR myLevel =
    PATHLENGTH ( VALUES ( 'Таблица1'[Иерархия] ) )
RETURN
    IF (
        HASONEVALUE ( 'Таблица1'[Человек] );
        CALCULATE (
            SUM ( 'Таблица1'[Продажи] );
            FILTER (
                ALL ( 'Таблица1'[Человек]; 'Таблица1'[Иерархия] );
                VAR difference =
                    PATHLENGTH ( 'Таблица1'[Иерархия] ) - myLevel
                RETURN
                    PATHCONTAINS ( 'Таблица1'[Иерархия]; myName )
                    && difference >= 0
                    && difference < 2
            )
        );
        BLANK ()
    )
 
Могут ли одни и те же люди быть детьми разных родителей?
Если нет, то тогда по моей формуле будет считать правильно.
 
Цитата
bereteli написал:
Archerius, Ваш метод возможен, но Вы же тоже должны понимать, что наглядный пример 4 строки, в реальности строк около 100к, и Ваш метод увеличит эти 100к в нереальное количество.
Конечно, понимаю.
Просто не нужно грузить данную промежуточную таблицу - сразу в свод.
 
Свои и дочерние без внуков и правнуков.
=СУММЕСЛИ(Таблица1[Иерархия];"*"&ПРАВБ(C14)&"*";Таблица1[Продажи])-СУММЕСЛИ(Таблица1[Иерархия];"*"&ПРАВБ(C14)&"|*|*";Таблица1[Продажи])
*Или универсальная. В ПОВТОР указываем, сколько поколений захватить. 2 - это сам человек и дочерние без последующих. 3 - ещё внуки.
=СУММЕСЛИ(Таблица1[Иерархия];"*"&ПРАВБ(C14)&"*";Таблица1[Продажи])-СУММЕСЛИ(Таблица1[Иерархия];"*"&ПРАВБ(C14)&ПОВТОР("|*";2)&"*";Таблица1[Продажи])
**Последнюю "*" можно выкинуть, хотя бы одно поколение будет считать.
=СУММЕСЛИ(Таблица1[Иерархия];"*"&ПРАВБ(C14)&"*";Таблица1[Продажи])-СУММЕСЛИ(Таблица1[Иерархия];"*"&ПРАВБ(C14)&ПОВТОР("|*";2);Таблица1[Продажи])
Изменено: Светлый - 03.08.2020 14:12:44
 
Светлый, Это все прекрасно. И я благодарен за ваши комментарии. Но эту задачу я не могу позволить себе решать в экселе))
Страницы: 1
Наверх