/
Datamart Join Sample Code
Datamart Join Sample Code
This is one way of doing joins, the alternative is to use DatamartContext.executeSqlQuery() and use standard ANSI SQL instead. See also Groovy Consoles.
def sku = api.product("sku")
// Get datamart context
def ctx = api.getDatamartContext()
def dm = ctx.getDatamart("TX_Data")
// Create datamart query
def qInvoices = ctx.newQuery(dm, false)
.select("Sku")
.select("SalesOrder")
.select("UnitSellPriceExFreight")
.select("UnitSellingPrice")
.select("CostExSupplier")
.select("UnitCostExSupplier")
.select("Quantity")
.select("UnitCostAvg")
.select("UnitPriceList")
.select("Segmentation_FINAL")
.select("Quoted_Business")
.select("ListPrice")
.select("Sales")
.select("MarketingGroup")
.select("ProductCode")
.select("TransactionDate")
.where(Filter.isNull("SegmentationExclusions"),
Filter.equal("Sku", sku),
Filter.equal("Active", "Yes"),
Filter.equal("Team1", "No"),
Filter.notEqual("SalesWarehouse", "95EX"),
Filter.notEqual("ProductSpecial", "Yes"),
Filter.isNull("Quoted_Business"),
Filter.notIn("InvoiceType", "Credit", "Credit Note"),
Filter.notEqual("Quantity", 0),
Filter.notEqual("SalesCost", 0)
)
// Create datamart query
def qCreditNotes = ctx.newQuery(dm, false)
.select("Sku")
.select("SalesOrder")
.select("UnitSellPriceExFreight")
.select("UnitSellingPrice")
.select("CostExSupplier")
.select("UnitCostExSupplier")
.select("Quantity")
.select("UnitCostAvg")
.select("UnitPriceList")
.select("Segmentation_FINAL")
.select("Quoted_Business")
.select("ListPrice")
.select("Sales")
.select("MarketingGroup")
.select("ProductCode")
.select("TransactionDate")
.where(Filter.isNull("SegmentationExclusions"),
Filter.equal("Sku", sku),
Filter.equal("Active", "Yes"),
Filter.equal("Team1", "No"),
Filter.notEqual("SalesWarehouse", "95EX"),
Filter.notEqual("ProductSpecial", "Yes"),
Filter.isNull("Quoted_Business"),
Filter.notIn("InvoiceType", "Credit", "Credit Note"),
Filter.notEqual("Quantity", 0),
Filter.notEqual("SalesCost", 0)
)
def joinFields = [
Sku : "Sku",
SalesOrder: SalesOrder
]
def qCreditNoteAware = ctx.newQuery(qInvoices, qCreditNotes, joinFields, false)
.select("Sku_1", "Sku")
.select("SalesOrder_1", "SalesOrder")
.select("((UnitSellPriceExFreight_1 * Quantity_1) + IfNull(UnitSellPriceExFreight_2, 0)) / Quantity_1", "UnitSellPriceExFreight")
.select("((UnitSellingPrice_1 * Quantity_1) + IfNull(UnitSellingPrice_2, 0)) / Quantity_1", "UnitSellingPrice")
.select("CostExSupplier_1", "CostExSupplier")
.select("UnitCostExSupplier_1", "UnitCostExSupplier")
.select("Quantity_1", "Quantity")
.select("UnitCostAvg_1", "UnitCostAvg")
.select("UnitPriceList_1", "UnitPriceList")
.select("Segmentation_FINAL_1", "Segmentation_FINAL")
.select("Quoted_Business_1", "Quoted_Business")
.select("ListPrice_1", "ListPrice")
.select("Sales_1 + IfNull(Sales_2, 0)", "Sales")
.select("MarketingGroup_1", "MarketingGroup")
.select("ProductCode_1", "ProductCode")
.select("TransactionDate_1", "TransactionDate")
// Run query and save result to memory
def result = ctx.executeQuery(qCreditNoteAware)
if (!result) {
api.throwException("Cannot perform query qCreditNoteAware")
}
def tableContext = api.getTableContext()
tableContext.createTable("Transaction_NonQuoted", result)
def timeStart = out.TimeFrameStart
def listPrice = out.ListPrice
def query = tableContext.newQuery("Transaction_NonQuoted")
.select("UnitSellPriceExFreight")
.where("TransactionDate >= '$timeStart'",
"Quantity > 0",
"UnitSellPriceExFreight > 0",
"UnitSellingPrice < $listPrice"
)
result = tableContext.executeQuery(query)
result?.getColumnValues(0)
Found an issue in documentation? Write to us.