Страницы: 1
RSS
Расчетные данные в исходной таблице. Что использовать PP или PQ?
 
Делаю первые шаги в освоении PQ и PP, помогите разобраться что использовать для добавления расчетных данных в исходную таблицу.
Пример: Исходная таблица содержит значения в разрезе Регионов, статей и месяцев. Задача добавить в исходную таблицу расчетную статью №500 равную разнице 300-100 статей. для каждого региона и месяца.
Что лучше использовать для таких расчетов PP или PQ для сложных формулах и больших объемах?
Изменено: TankSpb - 05.11.2019 10:03:00
 
TankSpb, тут уже неоднократно писалось:
если вам нужно вытащить расчетные данные в область значений отчета, то лучше всего использовать для этого меры
если расчетные данные нужно использовать как измерения отчета (будете выводить их в строки или столбцы) то тогда нужно делать расчетные столбцы.
А считать в PQ или в PP это уже вопрос сложности расчетов. Легкие лучше отдать PQ тогда не пострадает скорость загрузки в модель данных. Если же PQ не справляется с такими расчетами, то можно этот столбец рассчитать и в РР.
Это если вкратце, а так-то там очень многое от мощности железа и еще кучи всяких мелких факторов.
Вот горшок пустой, он предмет простой...
 
Спасибо. А можно пример на моем примере? А я для себя уже определюсь что красивее и быстрее)  
 
TankSpb, Вы должны четко понимать предназначения инструментов которыми пользуетесь. PQ - предназначен в первую очередь для преобразования "сырых" данных в нормальные таблицы, с которыми уже можно работать далее. PP - инструмент для создания модели данных (реалицонная база данных на минималках) и последующих вычислений. Конечно, каждый из них могут взаимозаменять в некоторых моментах и иногда даже лучше делать предварительные вычисления в PQ. Но в целом: PQ - загрузили и обработали, PP - вычислили и проанализировали.
 
вот попытка начинающего пользователя PQ
 
Спасибо) 2 промежуточных запроса и порядка 15 шагов, это жесть!) А есть более изящное решение?)
 
Цитата
TankSpb написал:
А есть более изящное решение?
Думаю да, но я же написал, что попытка начинающего пользователя PQ.
 
Давайте пропустим этот шаг)
 
Цитата
TankSpb написал:
А есть более изящное решение?
я бы вашу задачу решил так:
Код
Разность 300 и 100:=
    CALCULATE( SUM( 'Данные'[Факт] ); 'Данные'[Статья] = "300" ) - 
    CALCULATE( SUM( 'Данные'[Факт] ); 'Данные'[Статья] = "100" )
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
Разность 300 и 100
А можно эту меру назвать 500 и добавить не в отдельную сводную а в исходник в том же формате?
 
TankSpb, зачем задавать вопрос если можно попробовать?
Вот горшок пустой, он предмет простой...
 
Я бы попробовал, если бы знал как. Вот Вы показали Меры, я понял как их делать, как быстро и правильно добавить её в мою таблицу я пока не знаю.  
 
Цитата
TankSpb написал:
как быстро и правильно добавить её в мою таблицу я пока не знаю
У вас и не получится, т.к. я вашу таблицу фактов нормализовал. Посмотрите запрос PQ в примере. В том виде как это приведено у вас обычно таблицу фактов не оформляют.
Вам нужно запросом с той же логикой обработать исходную таблицу, потом результат запроса поместить в модель данных, потом затащить туда все необходимые справочники измерений, потом сгенерить таблицу-календарь, потом наладить связи от справочников к таблице фактов и в результате получите стандартную модель для анализа. Для которой несложно составлять меры, и которая не будет тупить при расчетах.
Изменено: PooHkrd - 05.11.2019 13:24:18
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал:
У вас и не получится, т.к. я вашу таблицу фактов нормализовал.
Хорошо, а можно показать на примере, как в Вашу "нормализованную" таблицу добавить вниз рассчитанную меру?
 
Можно так:

Но вы бы все таки по ссылочке из предыдущего моего поста полазили б с недельку другую. С интерфейсом по-ковырялись, ибо такие элементарные вещи тут разжевывать мало кому интересно.  ;)
Вот горшок пустой, он предмет простой...
 
PooHkrd, Мы с вами немного ушли от самой задачи, цель была добавить в исходную таблицу расчетную статью №500 равную разнице 300-100 статей, а не создание отдельной сводной, если Ваша сводная это промежуточный расчет, то прошу показать, как его добавить в исходную таблицу.

В сводную я Меру добавил, даже привел к нужному формату, как красиво добавить это в исходник?
Изменено: TankSpb - 05.11.2019 17:19:47
 
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Данные"]}[Content],
    Group = Table.Group(Source, {"Регион", "Месяц"}, {{"-", 
        each let 
            t=Table.Buffer(_[[Статья],[Факт18],[Факт19]]), 
            a=t{[Статья=300]},
            b=t{[Статья=100]} 
        in Table.InsertRows(t,0,{[Статья=500,Факт18=a[Факт18]-b[Факт18],Факт19=a[Факт19]-b[Факт19]]})
    }})    
in
    Table.ExpandTableColumn(Group, "-", {"Статья", "Факт18", "Факт19"})
Изменено: Андрей Лящук - 05.11.2019 21:00:42
 
Цитата
TankSpb написал:
Мы с вами немного ушли от самой задачи
Лично я никуда не отходил. Вы в примере не показали что хотите получить на выходе, дали только исходник. Т.к. выдумывать за вас я не могу то решил задачу как понял. Если не так понял, то извините - объясните более подробно.
Вот горшок пустой, он предмет простой...
 
Андрей Лящук, Спасибо тебе большое! Всё быстро и красиво)

Цитата
PooHkrd написал:
Вы в примере не показали что хотите получить на выходе, дали только исходник.
В первом сообщении вроде написано)
Цитата
TankSpb написал:
Задача добавить в исходную таблицу расчетную статью №500 равную разнице 300-100 статей.
PooHkrd, в любом случае спасибо, в твоих примерах нашел для себя что-то новое!
 
Цитата
TankSpb написал:
Всё быстро и красиво)
Так надо было строк с новой статьей навтыкать? Так бы сразу и сказали.  Вот мой вариант. Логика расчета та же что и у Андрея, но записано немножко по-другому, и я подстраховался от варианта если для одной статьи в одном месяце будет более одной строки.
Код
let
    Source = Excel.CurrentWorkbook(){[Name="Данные"]}[Content],
    GroupedRows = Table.Group( Source, {"Регион", "Месяц"}, {{"Записи", each 
        [t = Table.Buffer(_),
         x = [ Статья = 500, 
               Факт18 = List.Sum({ List.Sum( Table.SelectRows(t, each [Статья] = 300)[Факт18] ), -List.Sum( Table.SelectRows(t, each [Статья] = 100)[Факт18] ) }), 
               Факт19 = List.Sum({ List.Sum( Table.SelectRows(t, each [Статья] = 300)[Факт19] ), -List.Sum( Table.SelectRows(t, each [Статья] = 100)[Факт19] ) })]][x] }}),
    Expanded = Source & Table.ExpandRecordColumn(GroupedRows, "Записи", {"Статья", "Факт18", "Факт19"})
in
    Expanded
Изменено: PooHkrd - 05.11.2019 21:07:00
Вот горшок пустой, он предмет простой...
 
Цитата
PooHkrd написал: Вы в примере не показали...
Цитата
TankSpb написал:  PooHkrd... в твоих примерах
 
PooHkrd, Спасибо за замечание, про задвоение, хотя в моем варианте правильно выдать в этом случае ошибку)

А что можно почитать, чтобы научится писать такие запросы? И можно тогда на моем примере показать как в одном запросе "навтыкать строк" с расчетом по Макро-Региону (сумма показателей Факт 18 и Факт 19 по каждому месяцу и каждой статье? У меня вот так получилось:

Код
let
    Источник = Excel.CurrentWorkbook(){[Name="_500"]}[Content],
    #"Измененный тип" = Table.TransformColumnTypes(Источник,{{"Факт18", type number}, {"Факт19", type number}}),
    #"Сгруппированные строки" = Table.Group(#"Измененный тип", {"Месяц", "Статья"}, {{"Факт18", each List.Sum([Факт18]), type text}, {"Факт19", each List.Sum([Факт19]), type text}}),
    #"Добавлен пользовательский объект" = Table.AddColumn(#"Сгруппированные строки", "Регион", each "МР"),
    #"Добавленный запрос" = Table.Combine({#"Добавлен пользовательский объект", #"500"}),
    #"Переупорядоченные столбцы" = Table.ReorderColumns(#"Добавленный запрос",{"Регион", "Месяц", "Статья", "Факт18", "Факт19"}),
    #"Сортированные строки" = Table.Sort(#"Переупорядоченные столбцы",{{"Регион", Order.Ascending}, {"Месяц", Order.Ascending}, {"Статья", Order.Ascending}}),
    #"Измененный тип2" = Table.TransformColumnTypes(#"Сортированные строки",{{"Статья", type text}, {"Факт18", type number}, {"Факт19", type number}, {"Регион", type text}, {"Месяц", Int64.Type}})
in
    #"Измененный тип2"
Изменено: TankSpb - 06.11.2019 10:41:58
 
Вопрос не по теме
Страницы: 1
Наверх