AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX Blogs
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.07.2017, 18:11   #1  
Blog bot is offline
Blog bot
Участник
 
25,475 / 846 (79) +++++++
Регистрация: 28.10.2006
Malaysia: Best way inserting query to temporary table to improve performance
Источник: http://axmas.blogspot.com/2017/07/us...in-r2-for.html
==============

Use Query::insert_recordset in R2 for report best practice

insert_recordset and update_recordset will expedite the report performance, and to insert data from query to temp table, have to use Query::insert_recordset.

Understand that from forum it is only available in R3. However I have tried in R2 and surprised it is working.
My code show as below:

[SysEntryPointAttribute]
public void processReport()
{
SFA_MembershipTransContract contract;
SFA_MembershipTrans membershipTrans;
RetailTransactionTable retailTable;
RetailTransactionSalesTrans retailSalesTrans;
RetailTransactionPaymentTrans retailPaymentTrans,retailPaymentTrans2,retailPaymentTrans3,retailPaymentTrans4;
Query query,q;
QueryRun queryRun;
RecordInsertList insList;
QueryBuildDataSource qbds, qbds2;
QueryBuildFieldList fieldList;
Map fieldMapping;
SFA_RetailSalesTransTmp salesTransTmp;
SFA_RetailSalesTransCountTmp STCountTmp;
SFA_RetailPaymentTransTmp paymTransTmp,paymTransTmp2,paymTransTmp3,paymTransTmp4;
;

query = this.parmQuery();

qbds = query.dataSourceTable(tableNum(SFA_MembershipTrans));
queryRun = new QueryRun(query);


qbds = query.dataSourceTable(tableNum(SFA_MembershipTrans));

q = new Query(this.parmQuery());
fieldList = qbds.fields();
fieldList.addField(fieldNum(SFA_MembershipTrans, RecId));
fieldList.addField(fieldNum(SFA_MembershipTrans, Remarks));

fieldList.dynamic(QueryFieldListDynamic::No);

fieldMapping = new Map(Types::String, Types::Container);
fieldMapping.insert(fieldStr(SFA_MembershipTransTmp, MemberTransRefRecId), [qbds.uniqueId(), fieldStr(SFA_MembershipTrans, RecId)]);
fieldMapping.insert(fieldStr(SFA_MembershipTransTmp, Remarks), [qbds.uniqueId(), fieldStr(SFA_MembershipTrans, Remarks)]);

query::insert_recordset(tmpTbl,fieldMapping,q);

ttsBegin;
update_recordset tmpTbl setting BatchID = membershipTrans.BatchID,BatchName = membershipTrans.BatchName,CardId = membershipTrans.CardId, CardType = membershipTrans.CardType,
ClubHouse = membershipTrans.ClubHouse, ICNum = membershipTrans.ICNum, InvoiceId = membershipTrans.InvoiceId, MemberStatus = membershipTrans.MemberStatus,
MemberTypeCode = membershipTrans.MemberTypeCode, ModuleType = membershipTrans.ModuleType, NumberOfMonths = membershipTrans.NumberOfMonths, NumberOfYears = membershipTrans.NumberOfYears,
PeriodEndDate = membershipTrans.PeriodEndDate, PeriodStartDate = membershipTrans.PeriodStartDate, PlanDate = membershipTrans.PlanDate, ProcessDate = membershipTrans.ProcessDate,
Processed = membershipTrans.Processed, PromotionId = membershipTrans.PromotionId, ReasonCode = membershipTrans.ReasonCode, ReasonId = membershipTrans.ReasonId,
ReceiptId = membershipTrans.ReceiptId, RenewalType = membershipTrans.RenewalType, RetailLoyaltyCustId = membershipTrans.RetailLoyaltyCustId, SalesId = membershipTrans.SalesId,
SFA_Card = membershipTrans.SFA_Card, SourceType = membershipTrans.SourceType, TransDate = membershipTrans.TransDate, Valid = membershipTrans.Valid, PaymentVoucher = membershipTrans.PaymentVoucher
join membershipTrans where membershipTrans.RecId == tmpTbl.MemberTransRefRecId;

insert_recordset salesTransTmp (receiptId,netAmountInclTax)
select receiptId, sum(netAmountInclTax) from retailSalesTrans
group by retailSalesTrans.ReceiptId
join tmpTbl where retailSalesTrans.ReceiptId == tmpTbl.ReceiptId;

insert_recordset STCountTmp (receiptId,NoCount)
select receiptId, count(RecId) from retailSalesTrans
group by retailSalesTrans.ReceiptId
join tmpTbl where retailSalesTrans.ReceiptId == tmpTbl.ReceiptId && retailSalesTrans.ItemId like "MER-0*";

update_recordset salesTransTmp setting NoCount = STCountTmp.NoCount
join STCountTmp where STCountTmp.ReceiptId == salesTransTmp.ReceiptId;

update_recordset tmpTbl setting AmountMST = salesTransTmp.netAmountInclTax
join salesTransTmp where salesTransTmp.ReceiptId == tmpTbl.ReceiptId;

update_recordset tmpTbl setting PaymReference = "Multiple"
join salesTransTmp where salesTransTmp.ReceiptId == tmpTbl.ReceiptId && salesTransTmp.NoCount > 1;


insert_recordset paymTransTmp (receiptId,amountMST)
select receiptId, sum(amountMST) from retailPaymentTrans
group by retailPaymentTrans.receiptId
join tmpTbl where retailPaymentTrans.ReceiptId == tmpTbl.ReceiptId;

update_recordSet paymTransTmp setting SFA_PaymMode1 = retailPaymentTrans.SFA_PaymMode, SFA_PaymMode = retailPaymentTrans.SFA_PaymMode
join firstonly retailPaymentTrans where paymTransTmp.receiptId == retailPaymentTrans.ReceiptId;

update_recordSet paymTransTmp setting SFA_PaymMode2 = retailPaymentTrans2.SFA_PaymMode, SFA_PaymMode = paymTransTmp.SFA_PaymMode +","+ retailPaymentTrans2.SFA_PaymMode
join firstonly retailPaymentTrans2 where retailPaymentTrans2.ReceiptId == paymTransTmp.receiptId && retailPaymentTrans2.SFA_PaymMode != paymTransTmp.SFA_PaymMode1;

update_recordSet paymTransTmp setting SFA_PaymMode3 = retailPaymentTrans3.SFA_PaymMode, SFA_PaymMode = paymTransTmp.SFA_PaymMode +","+ retailPaymentTrans3.SFA_PaymMode
join firstonly retailPaymentTrans3 where retailPaymentTrans3.ReceiptId == paymTransTmp.receiptId && retailPaymentTrans3.SFA_PaymMode != paymTransTmp.SFA_PaymMode1 && retailPaymentTrans3.SFA_PaymMode != paymTransTmp.SFA_PaymMode2;

update_recordSet paymTransTmp setting SFA_PaymMode4 = retailPaymentTrans4.SFA_PaymMode, SFA_PaymMode = paymTransTmp.SFA_PaymMode +","+ retailPaymentTrans4.SFA_PaymMode
join firstonly retailPaymentTrans4 where retailPaymentTrans4.ReceiptId == paymTransTmp.receiptId && retailPaymentTrans4.SFA_PaymMode != paymTransTmp.SFA_PaymMode1 && retailPaymentTrans4.SFA_PaymMode != paymTransTmp.SFA_PaymMode2 && retailPaymentTrans4.SFA_PaymMode != paymTransTmp.SFA_PaymMode3;

update_recordset tmpTbl setting PaymMode = paymTransTmp.SFA_PaymMode, PaymAmountMST = paymTransTmp.amountMST
join paymTransTmp where paymTransTmp.ReceiptId == tmpTbl.ReceiptId;

ttsCommit;
}


*Add correct index to temporary table will also improve the performance


My AX version between CU6 - CU7




Источник: http://axmas.blogspot.com/2017/07/us...in-r2-for.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
emeadaxsupport: AX Performance Troubleshooting Checklist Part 2 Blog bot DAX Blogs 0 09.09.2014 16:11
emeadaxsupport: Microsoft Dynamics AX general performance analysis scripts page 5 Blog bot DAX Blogs 0 01.09.2014 14:11
PatrickChua: Temporary table Blog bot DAX Blogs 0 04.05.2009 14:05
wiki.dynamicsbook: Changes Made in Navision Attain 3.60 Blog bot Dynamics CRM: Blogs 0 02.09.2008 13:23
PatrickChua: Temporary table Blog bot DAX Blogs 0 28.10.2006 18:14

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 03:49.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.