Многие писали, что мера АВС не захватывает товар с самой минимальной выручкой. Чтобы исключить это, нужно добавить в код DAX условие для расчета доли: выбирай минимум между долей и 1. Обновленный код см.ниже: ABC Выручка = // считаем выручку по товарам каждого класса АВС // формируем таблицу с уникальным перечнем товаров и значением выручки для каждого товара var SalesByProduct = ADDCOLUMNS(ALLSELECTED('Товары'), "@ProdSales",[Выручка]) // считаем значение выручки по всем товарам var AllSales = CALCULATE([Выручка],ALLSELECTED('Товары')) var CumByProduct = ADDCOLUMNS(SalesByProduct,"@CumP", // определяем выручку для текущего товара var CurrentSalesA = [@ProdSales] // сортируем таблицу SalesByProduct по убыванию var CumulatedSales = FILTER(SalesByProduct, [@ProdSales]>=CurrentSalesA) // считаем выручку нарастающим итогом var CumulateSalesA = sumx(CumulatedSales,[@ProdSales]) // считаем долю; выбор минимума для избежания >100% в случае округления return MIN(DIVIDE(CumulateSalesA, AllSales) ,1) ) // на основании доли определяем класс АВС var ProductClass = filter(CROSSJOIN(CumByProduct,'АВС группы'), and([@CumP]>'АВС группы'[Нижняя граница], [@CumP]
Потому что для товара с минимальной выручкой расчет доли будет равен результату деления значения самого на себя. И в DAX результат такой операции может быть не просто 1, а единица с длинным-длинным хвостом. Поэтому лучше добавить условие выбора минимального между результатом деления и 1.
Долгожданное видео))) Как всегда все просто и понятно. Спасибо, Анна, что делитесь знаниями!!! Все Ваши наработки очень полезные и интересные. Благодарю!!!
Нужно построить вспомогательную таблицу с перечнем классов А, В, С (таймкод 11:21). Далее надо решить на основе какого показателя будет разделение товаров на классы А, В, С. Допустим, как в видео, на основе выручки. Тогда нужна мера как в видео (таймкод 13:35). Далее, чтобы посчитать прибыль товаров каждого класса, нужно создать похожую меру, внутри которой также распределить классы на основе какого-то показателя, скажем выручки, а в строке 13 кода меры использовать уже не меру выручки, а прибыль
Спасибо за видео! Поделитесь, пожалуйста, знаниями: как рассчитать скользящую сумму продаж за последние 5 недель за каждую из пяти недель, если период суммирования определяется от последней даты на конец недели минус кол-во дней за 5 недель. Буду строить сводную, где будет выведена мера, рассчитывающая скользящие продажи за месяц на каждую неделю
Для скользящей средней я бы использовала функцию WINDOW, в которую нужно передать такую же таблицу, какая будет в виджете, где вы хотите меру скользящего среднего использовать. Про построение скользящего среднего с помощью WINDOW я рассказывала в 3-м Уроке, th-cam.com/video/gmjszpN9dW0/w-d-xo.html, таймкод 01:04:36. И еще оконные функции разбирала здесь: th-cam.com/video/hHUXWnBKPzs/w-d-xo.html. Если возникнут трудности, пришлите файл на мою почту anna.powerbi@yandex.ru
Очень нужен детальный разбор AllSelect,expect и т.д. все ещё нет понимания как они работают в таблице, визуализациях, мерах... Порой получаешь не то что ожидаешь. Заранее благодарен!
Коллеги, подскажите, пожалуйста, почему нельзя в первой формуле с if заменить 4 строчку: var CurrentSalesA = [Выручка] на var CurrentSalesA = [@ProdSales] (ссылку приложить не удалось, ошибка: The value for '@ProdSales' cannot be determined. Either the column doesn't exist, or there is no current row for this column.) и, наоборот, почему во второй формуле 5ую строчку var CurrentSalesA = [@ProdSales] нельзя заменить на var CurrentSalesA = [Выручка], так как поменяется значение (ошибки не будет). Мы же записываем просто значение, какая разница откуда оно. Контент 💣
@Irina S, 4-ая строчка: В переменной CurrentSalesA = [Выручка] определяется выручка текущего товара. "Текущий" определяется контектом виджета. Например, для определения класса для Апельсины CurrentSalesA = выручка по апельсинам и т.д. по аналогии 5-ая строчка: В переменной CumSales = filter(SalesByProduct, [@ProdSales] >= CurrentSalesA) фильтруется таблица SalesByProduct по условию, что значения выручки из столбца [@ProdSales] больше или равно выручки текущего товара. Т.о. нельзя заменить [@ProdSales] и CurrentSalesA, т.к. CurrentSalesA это значение, а [@ProdSales] это весь столбец.
Анна, такой вопрос, если у меня уже в главное таблице продаж напротив каждой номенклатуры указаны категории, нужно ли мне тогда использовать функции которые у вас на второй и 3-й строках? Спасибо.
Я правильно понял, что главная мера, которую вы записали работает в том случае если таблица продаж состоит только из номенклатур и даты продаж? А если к примеру у меня таблица прожад выглядит из следующих столбцоа: Product_name, Order_id, Order_date, Sales? Тоесть продажи на уровне продукта и номера заказа. В данном случае мера будет работать корректно?
Мера должна работать корректно не зависимо от того, сколько столбцов в таблице продаж. Если нет, то пришлите мне свой файл pbix на почту anna.powerbi@yandex.ru
Подскажите как быть, если в таблице в которую выводим АВС анализ, не только товар (яблоки, груши и т.д.), но еще и например цвет этого товара)). Проблеиа в том, что когда добавляем еще одно значение, то АВС анализ перестает работать. Спасибо
Показанный расчет АВС работает по уникальному списку товаров. Если вы строите его к списку "яблоки, груши", а потом добавляете цвет, который дробит ваш список товаров на "яблоки зеленые, яблоки красные", то получается, что АВС вы считали не по уникальному списку. Я бы посоветовала сформировать уникальный список товаров в том виде, в каком будете его строить в виджете, и к нему считать АВС
Подскажите, пожалуйста, как для каждого уровня номенклатуры реализовать расчет ABC? У меня иерархия такая: категория - подкатегоря - подкатегория2 - модель. А результат выводится в виде таблицы, где в строках разворачивается эта иерархия (на + нажимает пользователь и разворачивает уровни при необходимости). Нужно чтобы в каждом уровне АBC считался. Для категории - по всем категориям, по подкатегории - среди подкатегорий развернутой категории, и так далее.
@Владислав Цалковский , для каждого уровня иерархии нужно назначить свой расчет АВС. Для нижнего уровня иерархии вы считаете АВС как я показала на видео, для среднего уровня (подкатегория) - как уже ответил Антон Курносов (спасибо, Антон!). Далее строите свою таблицу, где в строках разворачивается иерархия. Эта иерархия - наш контекст, а DAX как раз и работает внутри контекста. Т.е. нам нужно объяснить DAX что для разного контекста нужно использовать разные расчеты АВС-анализа. Для этого я бы сделала проверку через функцию ISFILTERED: Контекст = SWITCH(TRUE(), ISFILTERED('Таблица'[Товар]),1, //если фильтруется по товару, то значение 1 ISFILTERED('Таблица'[Подгруппа]),2, //если фильтруется по подгруппе, то значение 2 ISFILTERED('Таблица'[Группа]),3 //если фильтруется по группе, то значение 3 ) А далее через if можно уже рассчитать АВС: если [Контекст]=1, то считай АВС для товаров, если [Контекст]=2, то считай АВС для подгруппы и т.п.
Спасибо за такую хорошую работу, если вы можете сказать мне, как посчитать, сколько наименование продуктов , например, в категории А? заранее спасибо
На минуте 13:35 показываю как рассчитать выручку каждого класса. В мере указываю другую меру - [Выручка]. Вам нужно написать меру, которая считает товары, например distinctcount, и в меру АВС класса уже вставлять не выручку, а меру числа товаров
@@ConstellationBI Я оставляю все так же, как показано в вашем видео, но вместо общей суммы меня интересует, сколько товаров попадает в категории А, В и С.
Вам нужно создать отдельную меру КолвоТоваров. Дальше взять код меры АВС выручка, на минуте 13:35, и в нем в двух местах, в строках 2 и 3, указания меры [Выручка] заменить на указание меры [КолвоТоваров]
А как посчитать кол-во товаров в каждой группе ABC по второй мере? 🙂Не получается дописать её. Точнее не могу получит нужный результат. Попробовал вот так в Result - CALCULATE ( COUNTX(CumByProduct, [Прибыль]), KEEPFILTERS ( RoductClass ) , но это не дало нужного результата - в каждой группе одинаковое число товаров. Как написать меру количество товаров каждого класса?
@@MaybachONE отлично! Извините за долгий ответ)) Зато всегда приятнее разобраться самому!)) Кстати, вместо COUNTX('Товары', [Прибыль]) можно использовать COUNTROWS('Товары')
Попробуйте код меры-DAX из закрепленного комментария к видео. Там добавила проверку чтобы при расчете меры не получилось >100%. Или пришлите мне файл на почту, я посмотрю
Спасибо большое за ответ😊 к сожалению файл не смогу скинуть, он с рабочими данными Буду пробовать на основе закреплённого комментария что-то менять Спасибо!
Спасибо за классный гайд! 😀 Единственное, не могу понять - почему у меня если использовать меру только на товары, то ABC проставляется корректно, а если я хочу эту меру применить к товарной группе, то ABC проставляется некорректно? Хотя в самой мере я изменил HASONEVALUE ( 'Товары'[Товары] ), на HASONEVALUE ( 'Товары'[Товарная группа] ). С чем это может быть связано?
@@MaybachONE для каждого уровня номенклатуры отдельную меру в итоге писали? У меня иерархия такая: категория - подкатегоря - подкатегория2 - модель. А результат выводится в виде таблицы, где в строках разворачивается эта иерархия (на + нажимает пользователь и разворачивает уровни при необходимости). Нужно чтобы в каждом уровне АBC считался.
@@Vlimbo а у меня нет иерархии. У меня 2 отдельные таблицы. Поэтому, не подскажу. Но по всей видимости - да, надо для каждого уровня иерархии писать меру отдельную.
@@Vlimbo а тут можно попробовать сделать следующую связку. Рассчитать три меры для каждого уровня, или в VAR их записать. И потом: IF( ISINSCOPE (Товары[name]), мера для товаров, IF( ISINSCOPE (Товары[Subcategory]), мера для подкатегорий, IF( ISINSCOPE (Товары[Category]), мера для категорий ) ) ) Как-то так. Но сам не пробовал. 🙈
добрый день! никак не могу разобраться, какие изменения внести в код, чтобы решить проблему: создаю таблицу с товарами, на них влияют фильтры территории и менеджера и АВС анализ в данном случае работает как нужно. но при выборе, помимо фильтров территории и менеджера, - одного товара - ранг "АВС" пересчитывается. мне же нужно, чтобы ранг АВС остался таким, какой он есть, если не выбирать конкретный товар. код полностью идентичен коду в видео, как можно решить проблему?
Добрый день! Вам нужно настроить контекст фильтра по товарам. Попробуйте функцию ALLSELECTED заменить на ALL. Подробнее по функциям ALLxxx смотрите в моем уроке th-cam.com/video/xL0T9LZ9Jww/w-d-xo.html
@@ConstellationBI получается, мне нужно, чтобы нарастающий итог не реагировал на фильтр товара. то есть изменения требует строчка кода: var CumSalesA = SUMX(CumSales, [@ProdSales]) ?
@@ConstellationBI изменения произошли, но результат все равно не тот, что нужно. например, нужный мне товар при полном списке товаров попадает в категорию В. Если не менять код и просто выбрать именно этот товар, то товар попадает в категорию С. Если заменить ALLSELECTED на ALL, то товар (при фильтрации) попадает в группу А. АВС класс_3 = IF(HASONEVALUE('TC'[SKU_final]), var SalesByProdact = ADDCOLUMNS(ALLSELECTED('TC'), "@ProdSales", [Volume_23]) var AllSales = CALCULATE([Volume_23], ALL('TC')) var CurrentSalesA = [Volume_23] var CumSales = FILTER(SalesByProdact, [@ProdSales]>=CurrentSalesA) var CumSalesA = SUMX(CumSales, [@ProdSales]) var CurrentCumP = DIVIDE(CumSalesA, AllSales) var result = SWITCH(TRUE(), ISBLANK([Volume_23]), BLANK(), CurrentCumP
@@ConstellationBI да, спасибо. Сделал таблицу c ABC, пытался её с формулой связать, получилось только что могу сделать пусто вместо A,B,С видимо надо что бы товар выводился через меру, но так и не стал замораживаться.
@Созвездие Power BI Еще есть одна задача, с которой не могу справиться🙈. У меня получается две таблицы - ABC группы товаров и ABC товары. Когда я накладываю фильтр по группе товаров, то все отлично, по товарам в данной группе проставляется ABC. Но когда я фильтрую страницу по конкретному товару, то в таблице ABC группы товаров проставляет категорию не корректно - он учитывает только один этот товар в данной категории. Получается. что в место А, становится С. (надеюсь, понятно объясняю.) А я хочу, чтобы когда я выбирал конкретный товар, чтобы в таблице ABC группы товаров сохранялся присвоенный класс ABC каждой группе. Типа: фрукты продаются лучше чем овощи, у них категория А. И если мы выбираем где-то товар банан, то категория остается как есть А, а не меняется. Я перепробовал разные варианты со снятием фильтров, но так и не подобрал нужную мне комбинацию. Как я понимаю, надо тут снимать фильтр. - drive.google.com/file/d/1WqcAbgdld5z3NTNXUm6aIYGU4qE4eut6/view?usp=sharing Подскажите, как быть?)
@Антон Курносов, напрашивается вариант отменить воздействие виджета-таблицы АВС товаров на виджет-таблицу АВС группы. Кликаете на виджет -> вверху вкладка Формат -> изменить взаимодействие
@@ConstellationBI да, я думал об этом варианте) Но хотел справится мерой) Чтобы при выборе товара, в таблице группы товаров показывало определенную группу, в которой товар, но ABC считался как если бы отображались все группы товаров)
Многие писали, что мера АВС не захватывает товар с самой минимальной выручкой. Чтобы исключить это, нужно добавить в код DAX условие для расчета доли: выбирай минимум между долей и 1. Обновленный код см.ниже:
ABC Выручка =
// считаем выручку по товарам каждого класса АВС
// формируем таблицу с уникальным перечнем товаров и значением выручки для каждого товара
var SalesByProduct = ADDCOLUMNS(ALLSELECTED('Товары'), "@ProdSales",[Выручка])
// считаем значение выручки по всем товарам
var AllSales = CALCULATE([Выручка],ALLSELECTED('Товары'))
var CumByProduct = ADDCOLUMNS(SalesByProduct,"@CumP",
// определяем выручку для текущего товара
var CurrentSalesA = [@ProdSales]
// сортируем таблицу SalesByProduct по убыванию
var CumulatedSales = FILTER(SalesByProduct, [@ProdSales]>=CurrentSalesA)
// считаем выручку нарастающим итогом
var CumulateSalesA = sumx(CumulatedSales,[@ProdSales])
// считаем долю; выбор минимума для избежания >100% в случае округления
return
MIN(DIVIDE(CumulateSalesA, AllSales) ,1)
)
// на основании доли определяем класс АВС
var ProductClass = filter(CROSSJOIN(CumByProduct,'АВС группы'),
and([@CumP]>'АВС группы'[Нижняя граница],
[@CumP]
а почему не попадает?
Потому что для товара с минимальной выручкой расчет доли будет равен результату деления значения самого на себя. И в DAX результат такой операции может быть не просто 1, а единица с длинным-длинным хвостом. Поэтому лучше добавить условие выбора минимального между результатом деления и 1.
Оооочень подробное и оооочень полезное видео, Анна! Огромное вам спасибо за труд!
У вас замечательное объяснение! Спасибо вам огромное!
Анна, спасибо вам большое за столь детальные видео и полезные, спасибо вы большая умница :)
Спасибо огромное! Вы моя спасительница! ❤🌹🌹🌹
СПАСИБО ОГРОМНОЕ! Три дня мучалась с такой же задачей, и благодаря вам за 10 минут все получилось, жаль что не нашла вас раньше. Спасибо!
Спасибо, Ольга))
Долгожданное видео))) Как всегда все просто и понятно. Спасибо, Анна, что делитесь знаниями!!! Все Ваши наработки очень полезные и интересные. Благодарю!!!
Спасибо, @Анна Чернышова, за теплый отзыв!
у меня нет слов как это крутоооооооооо
Спасибо🤗
Чудо🎉🎉🎉
Супер! Спасибо большое. Я сам так и не смог побороть динамический АВС ))
Как, интересно, решить вот такую задачу: нужно для продуктов, сгруппированных по abc, суммировать прибыль, затраты на логистику и т.д?
Нужно построить вспомогательную таблицу с перечнем классов А, В, С (таймкод 11:21). Далее надо решить на основе какого показателя будет разделение товаров на классы А, В, С. Допустим, как в видео, на основе выручки. Тогда нужна мера как в видео (таймкод 13:35). Далее, чтобы посчитать прибыль товаров каждого класса, нужно создать похожую меру, внутри которой также распределить классы на основе какого-то показателя, скажем выручки, а в строке 13 кода меры использовать уже не меру выручки, а прибыль
Благодарю! За такое подробное видео, очень познавательно 👍
Спасибо, Юлия!
Анна, огромное спасибо! Только на последнем шаге у меня DAX стал ругаться на функцию SWITCH. Вышел из положения, заменив ее двойным IF: IF (IF)
спасибо большое!!
Спасибо за видео! Поделитесь, пожалуйста, знаниями: как рассчитать скользящую сумму продаж за последние 5 недель за каждую из пяти недель, если период суммирования определяется от последней даты на конец недели минус кол-во дней за 5 недель. Буду строить сводную, где будет выведена мера, рассчитывающая скользящие продажи за месяц на каждую неделю
Для скользящей средней я бы использовала функцию WINDOW, в которую нужно передать такую же таблицу, какая будет в виджете, где вы хотите меру скользящего среднего использовать. Про построение скользящего среднего с помощью WINDOW я рассказывала в 3-м Уроке, th-cam.com/video/gmjszpN9dW0/w-d-xo.html, таймкод 01:04:36. И еще оконные функции разбирала здесь: th-cam.com/video/hHUXWnBKPzs/w-d-xo.html. Если возникнут трудности, пришлите файл на мою почту anna.powerbi@yandex.ru
Очень нужен детальный разбор AllSelect,expect и т.д. все ещё нет понимания как они работают в таблице, визуализациях, мерах... Порой получаешь не то что ожидаешь.
Заранее благодарен!
Коллеги, подскажите, пожалуйста, почему нельзя в первой формуле с if заменить 4 строчку: var CurrentSalesA = [Выручка] на var CurrentSalesA = [@ProdSales] (ссылку приложить не удалось, ошибка: The value for '@ProdSales' cannot be determined. Either the column doesn't exist, or there is no current row for this column.) и, наоборот, почему во второй формуле 5ую строчку var CurrentSalesA = [@ProdSales] нельзя заменить на var CurrentSalesA = [Выручка], так как поменяется значение (ошибки не будет). Мы же записываем просто значение, какая разница откуда оно. Контент 💣
@Irina S, 4-ая строчка: В переменной CurrentSalesA = [Выручка] определяется выручка текущего товара. "Текущий" определяется контектом виджета. Например, для определения класса для Апельсины CurrentSalesA = выручка по апельсинам и т.д. по аналогии
5-ая строчка: В переменной CumSales = filter(SalesByProduct, [@ProdSales] >= CurrentSalesA) фильтруется таблица SalesByProduct по условию, что значения выручки из столбца [@ProdSales] больше или равно выручки текущего товара.
Т.о. нельзя заменить [@ProdSales] и CurrentSalesA, т.к. CurrentSalesA это значение, а [@ProdSales] это весь столбец.
Анна, такой вопрос, если у меня уже в главное таблице продаж напротив каждой номенклатуры указаны категории, нужно ли мне тогда использовать функции которые у вас на второй и 3-й строках? Спасибо.
Не очень поняла вопрос. Если нужно рассчитать авс для категорий, то нужно написать соответствующую меру авс для категорий
Я правильно понял, что главная мера, которую вы записали работает в том случае если таблица продаж состоит только из номенклатур и даты продаж? А если к примеру у меня таблица прожад выглядит из следующих столбцоа: Product_name, Order_id, Order_date, Sales? Тоесть продажи на уровне продукта и номера заказа. В данном случае мера будет работать корректно?
Мера должна работать корректно не зависимо от того, сколько столбцов в таблице продаж. Если нет, то пришлите мне свой файл pbix на почту anna.powerbi@yandex.ru
@@ConstellationBI Спасибо. Меру записал заново. Она заработала и работает корректно.
Подскажите как быть, если в таблице в которую выводим АВС анализ, не только товар (яблоки, груши и т.д.), но еще и например цвет этого товара)). Проблеиа в том, что когда добавляем еще одно значение, то АВС анализ перестает работать. Спасибо
Показанный расчет АВС работает по уникальному списку товаров. Если вы строите его к списку "яблоки, груши", а потом добавляете цвет, который дробит ваш список товаров на "яблоки зеленые, яблоки красные", то получается, что АВС вы считали не по уникальному списку. Я бы посоветовала сформировать уникальный список товаров в том виде, в каком будете его строить в виджете, и к нему считать АВС
Подскажите, пожалуйста, как для каждого уровня номенклатуры реализовать расчет ABC? У меня иерархия такая: категория - подкатегоря - подкатегория2 - модель. А результат выводится в виде таблицы, где в строках разворачивается эта иерархия (на + нажимает пользователь и разворачивает уровни при необходимости). Нужно чтобы в каждом уровне АBC считался. Для категории - по всем категориям, по подкатегории - среди подкатегорий развернутой категории, и так далее.
Добрый день! Вам удалось реализовать АВС с категориями и подкатегориями?
@Владислав Цалковский , для каждого уровня иерархии нужно назначить свой расчет АВС. Для нижнего уровня иерархии вы считаете АВС как я показала на видео, для среднего уровня (подкатегория) - как уже ответил Антон Курносов (спасибо, Антон!). Далее строите свою таблицу, где в строках разворачивается иерархия. Эта иерархия - наш контекст, а DAX как раз и работает внутри контекста. Т.е. нам нужно объяснить DAX что для разного контекста нужно использовать разные расчеты АВС-анализа. Для этого я бы сделала проверку через функцию ISFILTERED:
Контекст =
SWITCH(TRUE(),
ISFILTERED('Таблица'[Товар]),1, //если фильтруется по товару, то значение 1
ISFILTERED('Таблица'[Подгруппа]),2, //если фильтруется по подгруппе, то значение 2
ISFILTERED('Таблица'[Группа]),3 //если фильтруется по группе, то значение 3
)
А далее через if можно уже рассчитать АВС: если [Контекст]=1, то считай АВС для товаров, если [Контекст]=2, то считай АВС для подгруппы и т.п.
@@АльфияТюмкова ответила
Спасибо за такую хорошую работу, если вы можете сказать мне, как посчитать, сколько наименование продуктов , например, в категории А?
заранее спасибо
На минуте 13:35 показываю как рассчитать выручку каждого класса. В мере указываю другую меру - [Выручка]. Вам нужно написать меру, которая считает товары, например distinctcount, и в меру АВС класса уже вставлять не выручку, а меру числа товаров
@@ConstellationBI
Когда я меняю на меру distinct count , он считает общее количество товаров и не обращает внимания на фильтр.
Какой фильтр? Вам нужно встроить меру distinctcount в расчет АВС
@@ConstellationBI
Я оставляю все так же, как показано в вашем видео, но вместо общей суммы меня интересует, сколько товаров попадает в категории А, В и С.
Вам нужно создать отдельную меру КолвоТоваров. Дальше взять код меры АВС выручка, на минуте 13:35, и в нем в двух местах, в строках 2 и 3, указания меры [Выручка] заменить на указание меры [КолвоТоваров]
А как посчитать кол-во товаров в каждой группе ABC по второй мере? 🙂Не получается дописать её. Точнее не могу получит нужный результат.
Попробовал вот так в Result - CALCULATE ( COUNTX(CumByProduct, [Прибыль]), KEEPFILTERS ( RoductClass ) , но это не дало нужного результата - в каждой группе одинаковое число товаров. Как написать меру количество товаров каждого класса?
Разобрался, походу 🙉CALCULATE ( COUNTX("Товары", [Прибыль]), KEEPFILTERS ( PoductClass ) )
@@MaybachONE отлично! Извините за долгий ответ)) Зато всегда приятнее разобраться самому!))
Кстати, вместо COUNTX('Товары', [Прибыль]) можно использовать COUNTROWS('Товары')
Подскажите, что делать, если не проставляется категория АВС на некоторых наименованиях, а на остальных проставляется?
Попробуйте код меры-DAX из закрепленного комментария к видео. Там добавила проверку чтобы при расчете меры не получилось >100%. Или пришлите мне файл на почту, я посмотрю
Спасибо большое за ответ😊 к сожалению файл не смогу скинуть, он с рабочими данными
Буду пробовать на основе закреплённого комментария что-то менять
Спасибо!
Спасибо за классный гайд! 😀 Единственное, не могу понять - почему у меня если использовать меру только на товары, то ABC проставляется корректно, а если я хочу эту меру применить к товарной группе, то ABC проставляется некорректно? Хотя в самой мере я изменил HASONEVALUE ( 'Товары'[Товары] ), на HASONEVALUE ( 'Товары'[Товарная группа] ). С чем это может быть связано?
Разобрался😄 Надо было прописать HASONEVALUE ( 'Товары'[Товарная группа] ) и в ALLSELECTED ( 'Товары'[Товарная группа] ).
@@MaybachONE для каждого уровня номенклатуры отдельную меру в итоге писали? У меня иерархия такая: категория - подкатегоря - подкатегория2 - модель. А результат выводится в виде таблицы, где в строках разворачивается эта иерархия (на + нажимает пользователь и разворачивает уровни при необходимости). Нужно чтобы в каждом уровне АBC считался.
@@Vlimbo а у меня нет иерархии. У меня 2 отдельные таблицы. Поэтому, не подскажу. Но по всей видимости - да, надо для каждого уровня иерархии писать меру отдельную.
@@MaybachONE понял, надеюсь Анна прочитает
@@Vlimbo а тут можно попробовать сделать следующую связку. Рассчитать три меры для каждого уровня, или в VAR их записать.
И потом:
IF(
ISINSCOPE (Товары[name]),
мера для товаров,
IF(
ISINSCOPE (Товары[Subcategory]),
мера для подкатегорий,
IF(
ISINSCOPE (Товары[Category]),
мера для категорий
)
)
)
Как-то так. Но сам не пробовал. 🙈
Анна, не включает минимальное значение в группу С. С чем может быть связано?
Можете прислать файл на почту?
добрый день! никак не могу разобраться, какие изменения внести в код, чтобы решить проблему:
создаю таблицу с товарами, на них влияют фильтры территории и менеджера и АВС анализ в данном случае работает как нужно.
но при выборе, помимо фильтров территории и менеджера, - одного товара - ранг "АВС" пересчитывается. мне же нужно, чтобы ранг АВС остался таким, какой он есть, если не выбирать конкретный товар.
код полностью идентичен коду в видео, как можно решить проблему?
Добрый день! Вам нужно настроить контекст фильтра по товарам. Попробуйте функцию ALLSELECTED заменить на ALL. Подробнее по функциям ALLxxx смотрите в моем уроке th-cam.com/video/xL0T9LZ9Jww/w-d-xo.html
@@ConstellationBI получается, мне нужно, чтобы нарастающий итог не реагировал на фильтр товара. то есть изменения требует строчка кода: var CumSalesA = SUMX(CumSales, [@ProdSales]) ?
Вы попробовали заменить ALLSELECTED на ALL ? Не помогло?
@@ConstellationBI изменения произошли, но результат все равно не тот, что нужно. например, нужный мне товар при полном списке товаров попадает в категорию В. Если не менять код и просто выбрать именно этот товар, то товар попадает в категорию С. Если заменить ALLSELECTED на ALL, то товар (при фильтрации) попадает в группу А.
АВС класс_3 = IF(HASONEVALUE('TC'[SKU_final]),
var SalesByProdact = ADDCOLUMNS(ALLSELECTED('TC'), "@ProdSales", [Volume_23])
var AllSales = CALCULATE([Volume_23], ALL('TC'))
var CurrentSalesA = [Volume_23]
var CumSales = FILTER(SalesByProdact, [@ProdSales]>=CurrentSalesA)
var CumSalesA = SUMX(CumSales, [@ProdSales])
var CurrentCumP = DIVIDE(CumSalesA, AllSales)
var result = SWITCH(TRUE(),
ISBLANK([Volume_23]), BLANK(),
CurrentCumP
@@ЛенаЕгорова-я2л пришлите файл на почту, посмотрю
Сделал меру динамический ABC, но ни как его в срез не засуну.
Меру не получится использовать в срезе. Т.к. мера требует какого-то контекста. В срез можно поместить только столбцы физической таблицы.
@@ConstellationBI да, спасибо. Сделал таблицу c ABC, пытался её с формулой связать, получилось только что могу сделать пусто вместо A,B,С видимо надо что бы товар выводился через меру, но так и не стал замораживаться.
@Созвездие Power BI Еще есть одна задача, с которой не могу справиться🙈. У меня получается две таблицы - ABC группы товаров и ABC товары. Когда я накладываю фильтр по группе товаров, то все отлично, по товарам в данной группе проставляется ABC. Но когда я фильтрую страницу по конкретному товару, то в таблице ABC группы товаров проставляет категорию не корректно - он учитывает только один этот товар в данной категории. Получается. что в место А, становится С. (надеюсь, понятно объясняю.)
А я хочу, чтобы когда я выбирал конкретный товар, чтобы в таблице ABC группы товаров сохранялся присвоенный класс ABC каждой группе. Типа: фрукты продаются лучше чем овощи, у них категория А. И если мы выбираем где-то товар банан, то категория остается как есть А, а не меняется.
Я перепробовал разные варианты со снятием фильтров, но так и не подобрал нужную мне комбинацию. Как я понимаю, надо тут снимать фильтр. - drive.google.com/file/d/1WqcAbgdld5z3NTNXUm6aIYGU4qE4eut6/view?usp=sharing
Подскажите, как быть?)
@Антон Курносов, напрашивается вариант отменить воздействие виджета-таблицы АВС товаров на виджет-таблицу АВС группы. Кликаете на виджет -> вверху вкладка Формат -> изменить взаимодействие
@@ConstellationBI да, я думал об этом варианте) Но хотел справится мерой) Чтобы при выборе товара, в таблице группы товаров показывало определенную группу, в которой товар, но ABC считался как если бы отображались все группы товаров)
@@MaybachONE по вашему принтскрину попробуйте снять фильтр и в переменной AllSales, и в переменной SalesByProduct