Страницы: 1
RSS
Создание меры для выведения в таблицу TOP N в разрезе подразделений PQ или PBI, Прошу помощи с написанием меры TOPN или любой другой меры для вывода ТОП 3 по продажам продукции в подразделении за определенный период
 
Прошу помощи с написанием меры TOPN или любой другой меры для вывода ТОП 3 по продажам продукции в подразделении за определенный период.

Нужно вывести в таблицу продажи N количество товаров по убыванию суммы продажи в разрезе подразделения
Заранее огромное спасибо
Пример во вложении
 
Здравствуйте.
Сделал в PowerQuery (почти все кнопками). Посмотрите, может подойдет.
 
Aлeкceй, К сожалению нужно формулой ((
 

Цитата
написал:
К сожалению нужно формулой ((

Код
ТОП N Продажи = 
VAR N = 3
VAR ТекущееПодразделение = SELECTEDVALUE(Подразделение[Подразделение])
VAR ТопТоваровТаблица = 
    TOPN(
        N,
        SUMMARIZE(
            FILTER(Продажи, Продажи[Подразделение] = ТекущееПодразделение),
            Продукция[Товар],
            "СуммаПродаж", SUM(Продажи[Сумма])
        ),
        [СуммаПродаж], DESC
    )
RETURN
    CALCULATE(
        SUM(Продажи[Сумма]),
        KEEPFILTERS(ТопТоваровТаблица)
    )

Эта мера работает следующим образом:

  1. Определяет количество товаров в топе (N = 3)

  2. Получает текущее выбранное подразделение

  3. Создает таблицу с топ N товарами для этого подразделения, сортируя их по сумме продаж

  4. Возвращает сумму продаж только для этих топ N товаров

Если также нужно отображать категорию "Остальные" для товаров, не попавших в топ, можно использовать следующую меру:
Код
ТОП N с Остальными = 
VAR N = 3 // Количество товаров в топе
VAR ТекущееПодразделение = SELECTEDVALUE(Подразделение[Подразделение])
VAR ТопТоваровТаблица = 
    TOPN(
        N,
        SUMMARIZE(
            FILTER(Продажи, Продажи[Подразделение] = ТекущееПодразделение),
            Продукция[Товар],
            "СуммаПродаж", SUM(Продажи[Сумма])
        ),
        [СуммаПродаж], DESC
    )
VAR ТопПродажи = 
    CALCULATE(
        SUM(Продажи[Сумма]),
        KEEPFILTERS(ТопТоваровТаблица)
    )
VAR ОбщиеПродажи = 
    CALCULATE(
        SUM(Продажи[Сумма]),
        FILTER(Продажи, Продажи[Подразделение] = ТекущееПодразделение)
    )
VAR ОстальныеПродажи = ОбщиеПродажи - ТопПродажи
VAR ТекущийТовар = SELECTEDVALUE(Продукция[Товар])
RETURN
    IF(
        CONTAINS(ТопТоваровТаблица, Продукция[Товар], ТекущийТовар),
        ТопПродажи,
        IF(ТекущийТовар = "Остальные", ОстальныеПродажи, BLANK())
    )

Чтобы добавить фильтр по дате, можно модифицировать меру, добавив условие по дате в FILTER:
Код
ТОП N Продажи по Периоду = 
VAR N = 3
VAR НачалоПериода = DATE(2025, 1, 1) // Начало периода
VAR КонецПериода = DATE(2025, 1, 31) // Конец периода
VAR ТекущееПодразделение = SELECTEDVALUE(Подразделение[Подразделение])
VAR ТопТоваровТаблица = 
    TOPN(
        N,
        SUMMARIZE(
            FILTER(
                Продажи, 
                Продажи[Подразделение] = ТекущееПодразделение && 
                Продажи[Дата] >= НачалоПериода && 
                Продажи[Дата] <= КонецПериода
            ),
            Продукция[Товар],
            "СуммаПродаж", SUM(Продажи[Сумма])
        ),
        [СуммаПродаж], DESC
    )
RETURN
    CALCULATE(
        SUM(Продажи[Сумма]),
        KEEPFILTERS(ТопТоваровТаблица),
        Продажи[Дата] >= НачалоПериода && Продажи[Дата] <= КонецПериода
    )

One tap - one kill
 
Frolov_Andrey, добрый день.
Еще вариант, правда не такой развернутый как у Bug Hunter  :D :
Код
_topN :=
var _n = 3
var _podr = VALUES('Таблица1'[Подразделение])
var _top = GENERATE(_podr;
   CALCULATETABLE( TOPN(
      _n;
      ALLSELECTED('Таблица2'[Товар]);
      [_sum];
      DESC
      )
   )
)
var _result =  CALCULATE([_sum];KEEPFILTERS(_top))
return _result
 
Alex, Bug Hunter, Спасибо огромное, буду сейчас тестировать
Страницы: 1
Читают тему
Наверх