Dynamic grouping for inventory dimension on SSRS Report in AX12 using query builder
We usually see the inventory dimensions selection criteria while running several inventory reports. I just went through the requirement where we needed to group on dimensions dynamically based on the selection. Different approaches can be used. I used query builder classes. Let’s say a user wants to split data on site, warehouse and batch number for the item
Below is the code
which is getting a sum of quantity from the inventory transaction table for the
items.
Query inventTransQuery
= new Query();
QueryBuildRange dynRange;
QueryBuildDataSource qbdsInvent, qbdsDim;
inventTransQuery.clearAllFields();
qbdsInvent =
inventTransQuery.addDataSource(tableNum(InventTrans));
qbdsDim = qbdsInvent.addDataSource(tableNum(InventDim));
qbdsInvent.addSelectionField(fieldNum(InventTrans,Qty),
SelectionField::Sum);
qbdsInvent.addGroupByField(fieldNum(InventTrans,ItemId));
qbdsInvent.addSelectionField(fieldNum(InventTrans, ItemId));
qbdsDim.relations(true);
Now, adding dynamic grouping for inventory
dimensions.
inventdimviewcontract = contract.parmInventDimViewContract();
if (inventdimviewcontract.parmViewInventSiteId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventSiteId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventSiteId));
}
if (inventdimviewcontract.parmViewInventLocationId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventLocationId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventLocationId));
}
if ( inventdimviewcontract.parmViewInventBatchId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventBatchId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventBatchId));
}
if
(inventdimviewcontract.parmViewInventSerialId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventSerialId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventSerialId));
}
if
(inventdimviewcontract.parmViewInventSizeId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventSizeId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventSizeId));
}
if
(inventdimviewcontract.parmViewInventColorId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventColorId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventColorId));
}
if (inventdimviewcontract.parmViewConfigId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, ConfigId));
_qbdsDim.addOrderByField(fieldNum(inventDim, ConfigId));
}
if (inventdimviewcontract.parmViewWMSLocationId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, wMSLocationId));
_qbdsDim.addOrderByField(fieldNum(inventDim, wMSLocationId));
}
if
(inventdimviewcontract.parmViewInventStyleId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventStyleId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventStyleId));
}
if
(inventdimviewcontract.parmViewWMSPalletId())
{
_qbdsDim.addSelectionField(fieldNum(inventDim, WMSPalletId));
_qbdsDim.addOrderByField(fieldNum(inventDim, WMSPalletId));
}
_qbdsDim.orderMode(OrderMode::GroupBy);
QueryBuildDataSource qbdsInvent, qbdsDim;
inventTransQuery.clearAllFields();
qbdsDim = qbdsInvent.addDataSource(tableNum(InventDim));
qbdsInvent.addGroupByField(fieldNum(InventTrans,ItemId));
qbdsInvent.addSelectionField(fieldNum(InventTrans, ItemId));
qbdsDim.relations(true);
_qbdsDim.addSelectionField(fieldNum(inventDim, InventSiteId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventLocationId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventLocationId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventBatchId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventBatchId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventSerialId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventSerialId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventSizeId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventSizeId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventColorId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventColorId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, ConfigId));
_qbdsDim.addOrderByField(fieldNum(inventDim, ConfigId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, wMSLocationId));
_qbdsDim.addOrderByField(fieldNum(inventDim, wMSLocationId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, InventStyleId));
_qbdsDim.addOrderByField(fieldNum(inventDim, InventStyleId));
}
{
_qbdsDim.addSelectionField(fieldNum(inventDim, WMSPalletId));
_qbdsDim.addOrderByField(fieldNum(inventDim, WMSPalletId));
}
AX Query:
GROUP BY InventTrans.ItemId, InventDim.InventSiteId, InventDim.InventLocationId, InventDim.inventBatchId
JOIN InventSiteId, InventLocationId, inventBatchId
FROM InventDim
ON InventTrans.inventDimId = InventDim.inventDimId
SELECT SUM(Qty), ItemId, InventSiteId, InventLocationId, inventBatchId
FROM InventTrans
JOIN InventDim
ON InventTrans.inventDimId = InventDim.inventDimId
GROUP BY InventTrans.ItemId, InventDim.InventSiteId, InventDim.InventLocationId, InventDim.inventBatchId
Comments
Post a Comment