Size: a a a

Power BI Group RU

2020 October 13

MZ

Maxim Zelensky in Power BI Group RU
Sergei Sergeev
Я пытаюсь вычислить ABC по шаблону из DAX Patterns

ABC Class Optimized =
VAR SalesByProduct = ADDCOLUMNS ( 'Product', "@ProdSales", [Sales Amount] )
VAR CurrentSales = [Sales Amount]
VAR BetterProducts = FILTER ( SalesByProduct, [@ProdSales] >= CurrentSales )
VAR CumulatedSales = SUMX ( BetterProducts, [@ProdSales] )
VAR AllSales = CALCULATE ( [Sales Amount], ALL ( 'Product' ) )
VAR CumulatedPct = DIVIDE ( CumulatedSales, AllSales )
VAR AbcClass =
SWITCH (
   TRUE,
   CumulatedPct <= 0.7, "A",
   CumulatedPct <= 0.9, "B",
   "C"
)
RETURN
   AbcClass

Мне необходимо модифицировать эту формулу с учетом того, что классификация должна быть не по каждой строке (контрагенту), а в разрезе головных контрагентов. Т.е. продажи ООО 1 и ООО 2 должны учитываться как сумма, если обе ООО принадлежат одному головному контрагенту.
ну вот так вот работает на моем примере (в конце там проверка, что всё просуммировалось):
Column =
VAR _SalesByBanner =
   ADDCOLUMNS (
       SUMMARIZE ( Customers, Customers[Головной] ),
       "@SalesByBanner",
           CALCULATE (
               SUM ( Sales[Volume] ),
               ALLEXCEPT ( Customers, Customers[Головной] )
           )
   )
RETURN
   SUMX ( _SalesByBanner, [@SalesByBanner] )
источник

SS

Sergei Sergeev in Power BI Group RU
Maxim Zelensky
ну вот так вот работает на моем примере (в конце там проверка, что всё просуммировалось):
Column =
VAR _SalesByBanner =
   ADDCOLUMNS (
       SUMMARIZE ( Customers, Customers[Головной] ),
       "@SalesByBanner",
           CALCULATE (
               SUM ( Sales[Volume] ),
               ALLEXCEPT ( Customers, Customers[Головной] )
           )
   )
RETURN
   SUMX ( _SalesByBanner, [@SalesByBanner] )
Максим, переписал для себя, с мерой. Все вроде работает. Сейчас проверб с рабочей версией. Спасибо!
источник

MZ

Maxim Zelensky in Power BI Group RU
Александр Владимирович
А где этот параметр создать? Да мне просто нужен ограниченный датасет и не более.
В редакторе Power Query есть.
источник

MZ

Maxim Zelensky in Power BI Group RU
Александр Владимирович
А где этот параметр создать? Да мне просто нужен ограниченный датасет и не более.
затем вот так:
источник

Z

Zurab in Power BI Group RU
😭 я наконец понял по настоящему почему в вычисляемом столбе sum( 'Sales' [Quantity] ) в каждой строке возвращает сумму за весь столбец))
источник

MZ

Maxim Zelensky in Power BI Group RU
Zurab
😭 я наконец понял по настоящему почему в вычисляемом столбе sum( 'Sales' [Quantity] ) в каждой строке возвращает сумму за весь столбец))
лучше поздно, чем никогда :)
источник

MZ

Maxim Zelensky in Power BI Group RU
Zurab
😭 я наконец понял по настоящему почему в вычисляемом столбе sum( 'Sales' [Quantity] ) в каждой строке возвращает сумму за весь столбец))
кстати, а расскажите, как вы это поняли? Что происходит в данном случае?
источник

MZ

Maxim Zelensky in Power BI Group RU
мне прям любопытно. В более чем половине случаев начальное предположение неверно :)
источник

Z

Zurab in Power BI Group RU
Maxim Zelensky
лучше поздно, чем никогда :)
глупый, который знает что он глупый уже не такой глупый))
надеюсь это меня спасет))
источник

АВ

Александр Владимиров... in Power BI Group RU
Maxim Zelensky
затем вот так:
ок попробую, но мне это нужно в Excel, если я делаю всё в Power Bi там вообще проблем нет. а вот в Excel беда((.
источник

Z

Zurab in Power BI Group RU
Maxim Zelensky
кстати, а расскажите, как вы это поняли? Что происходит в данном случае?
я читаю на русском книгу итальянцев, возможно если бы я в первый раз читал то опять бы не понял, а по второму разу, разбор в четвертой главе контекстов как то лучше прочувствовался, и пришло понимание, что контекст строки не ограничивает а итерирует))Там так и написано, в общем то, но как то с первого раза я лично  не усвоил
источник

Z

Zurab in Power BI Group RU
т.е. даст сумму проитерированных строк, но всех)
источник

Z

Zurab in Power BI Group RU
а если в вычисляемом столбце просто ссылка на другой столбец, то поскольку там нет никакой агрегации т благодаря контексту строки он из этого столбца вернет просто соответствующее значение.
(это я дальше рассуждаю себе)
источник

MZ

Maxim Zelensky in Power BI Group RU
Zurab
я читаю на русском книгу итальянцев, возможно если бы я в первый раз читал то опять бы не понял, а по второму разу, разбор в четвертой главе контекстов как то лучше прочувствовался, и пришло понимание, что контекст строки не ограничивает а итерирует))Там так и написано, в общем то, но как то с первого раза я лично  не усвоил
хм... я бы даже никогда не подумал в таком ключе :)
контекст фильтра конечно (в случае с sum( 'Sales' [Quantity] ) в столбце) присутствует, но он вроде как пустой. Контекст строки есть, но нет переноса контекста, так как нет CALCULATE.

Я вообще это для себя объясняю совсем по-другому :) может, не настолько академично и с другого бока...
источник

MZ

Maxim Zelensky in Power BI Group RU
Zurab
я читаю на русском книгу итальянцев, возможно если бы я в первый раз читал то опять бы не понял, а по второму разу, разбор в четвертой главе контекстов как то лучше прочувствовался, и пришло понимание, что контекст строки не ограничивает а итерирует))Там так и написано, в общем то, но как то с первого раза я лично  не усвоил
для меня проще так:
Объяснение "в лоб":
SUM принимает своим аргументом столбец (ссылку на столбец таблицы). То есть ее аргумент - это именно столбец таблицы, ограниченный текущим контекстом (а не скалярное значение в текущей строке). В вычисляемом столбце в отсутствие CALCULATE и/или других модификаторов контекста на этот столбец никакие фильтры не действуют.
Дополнение:
потому что SUM(Table[Column]) внутренне эквивалентно SUMX(Table, Table[Column]). SUMX итерирует таблицу Table и суммирует значения в ее столбце. Внешний контекст фильтров пустой, перенос контекста не задействован, соответственно таблица Table внутри SUMX содержит все строки, и сумма по столбцу считается без ограничений.
источник

Е

Евген in Power BI Group RU
Всем привет!
Подскажите, пожалуйста, от чего зависит всплывающая подсказка Power Bi  
? В одном и том же графике вариант 1 и вариант 2. Хотелось, чтобы всегда был вариант 1
источник

Е

Евген in Power BI Group RU
источник

Е

Евген in Power BI Group RU
источник

Z

Zurab in Power BI Group RU
Maxim Zelensky
для меня проще так:
Объяснение "в лоб":
SUM принимает своим аргументом столбец (ссылку на столбец таблицы). То есть ее аргумент - это именно столбец таблицы, ограниченный текущим контекстом (а не скалярное значение в текущей строке). В вычисляемом столбце в отсутствие CALCULATE и/или других модификаторов контекста на этот столбец никакие фильтры не действуют.
Дополнение:
потому что SUM(Table[Column]) внутренне эквивалентно SUMX(Table, Table[Column]). SUMX итерирует таблицу Table и суммирует значения в ее столбце. Внешний контекст фильтров пустой, перенос контекста не задействован, соответственно таблица Table внутри SUMX содержит все строки, и сумма по столбцу считается без ограничений.
лично я, без понимания что контекст строки не фильтрует, посчитал бы что SUMX  в 'Table' благодаря контексту строки вернул бы таблицу в одну строку. Т.е. для меня ключевое что контекст строки не фильтрует. Я прям получаю удовольствие от такого приобретенного знания))
источник

MZ

Maxim Zelensky in Power BI Group RU
Zurab
лично я, без понимания что контекст строки не фильтрует, посчитал бы что SUMX  в 'Table' благодаря контексту строки вернул бы таблицу в одну строку. Т.е. для меня ключевое что контекст строки не фильтрует. Я прям получаю удовольствие от такого приобретенного знания))
Вот в случае с MAX в Power BI всё нагляднее.
Синтаксис у нее такой:
MAX ( <ColumnNameOrScalar1> [, <Scalar2>] )
Это означает, что если аргумент 1, то это должна быть ссылка на столбец:
MAX(Table[Column1]) = максимальное значение столбца Table[Column1]
А если аргументов 2, это могут быть 2 числа, 2 текста, 2 даты - в общем, 2 скалярных значения.
MAX("A","B")="B"
Но если мы напишем в вычисляемом столбце MAX(Table[Column1], Table[Column2]), то функция будет ожидать скалярные значения, и здесь они будут получены как значения Column1 и Column2 в текущей строке.

Правда, запутывает? :):):)
источник