03.08.2009, 12:26 | #1 |
Участник
|
использование Reporting Services в Axapta
Постепенно перевожу отчеты на RS и вот какие мысли по этому поводу:
в аксаптовских отчетах отчетах основная претензия - неудобно пользоваться пользователи хотят нормальную выгрузку в Excel, чтобы работать в привычной среде в RS удобные механизмы группировки записей, можно добавить графики, диаграммы можно повысить удобство работы и настроить цвета ячеек, например по коэффициентам или другим параметрам с помощью параметра BackgroundColor X++: =IIF(Fields!ABCRate.Value="A", "Green", IIF(Fields!ABCRate.Value="B", "Yellow", IIF(Fields!ABCRate.Value="C", "Red", "White"))) так как прямой доступ к БД, скорость выше, чем аксаптовские отчеты можно поставить RS Data Extension и обращаться через фреймфорк к AX 2009, но с этим пока не разбирался из минусов - во первых нужно самому писать SQL-запросы и настраивать дизайн - русское название поля и его длину enum-ы в таблицах это просто числа, соответственно нужно делать подстановку на уровне SQL запроса. есть два варианта решения 1.подменять цифры на текст непосредственно в запросе через CASE 2.сформировать таблицу наподобие OlapEnum, где хранить все EnumName, EnumText и EnumValue и join-ить ее (плюс нужно обновлять после каждого изменения в enum-ах) это можно сделать в случае, если нужно будет делать много отчетов и предпологается активное изменение enum-ов, для небольшого количества проще использовать case еще остается вопрос - если много раз присоединить такую таблицу в запросе, как это скажется на производительности вот пример запроса для отчета "ABC по продажам за период" X++: select ItemID, Sum(LineAmountMST) as Summ, Sum(Qty) as SummQty into #tmp from bmssa.CustInvoiceTrans where InvoiceDate >= @DateFrom and InvoiceDate <= @DateTo group by ItemID order by Summ DESC select IC.ItemCodeDesc, IC.ItemCategoryID, t1.ItemID, IT.ItemName, cast(t1.Summ as Numeric(10,2)) as SoldAmountMST, cast(t1.SummQty as int) as SoldAmountQty, case when sum(case when t1.Summ <= t2.Summ then t2.Summ end) < sum(t2.Summ) *@RateA/100 then 'A' when sum(case when t1.Summ <= t2.Summ then t2.Summ end) < sum(t2.Summ) *@RateB/100 then 'B' else 'C' end as ABCRate, case when IT.ABCRevenue = 1 then 'A' when IT.ABCRevenue = 2 then 'B' when IT.ABCRevenue = 3 then 'C' else '-' end as ABCRateOLD, IT.ABCRevenue as ABCRevenueCodeOLD from #tmp t1, #tmp t2, bmssa.InventTable IT, bmssa.ITEMCATEGORY AS IC where IT.ItemID = t1.ItemID and IT.ITEMCATEGORYID = IC.ITEMCATEGORYID group by IC.ItemCategoryID, IC.ItemCodeDesc, IT.ItemName, IT.ABCRevenue, t1.ItemID, t1.Summ, t1.SummQty drop table #tmp |
|
|
За это сообщение автора поблагодарили: GLU (1), belugin (3). |
Теги |
olap, законченный пример, полезное, reporting services, report |
|
|