Comparison of Product Extensions and Data Sources / Datamart

Deciding whether to use Product Extensions (PX) or Data Sources (DS) / Datamarts is sometimes not easy. This table should help you identify the main differences:

Area

Product Extension

Data Source / Datamart

Area

Product Extension

Data Source / Datamart

Needed license for

Price Setting module

Analytics module

Designed for big data (e.g. transaction history)

 No

 Yes

Designed for frequently changing data

 Yes

 No. The data needs to be loaded from Data Feeds to Data Source and e.g. daily flushed to the Data Source.

Can values be edited by the user

 Yes

 No

Creating charts

Via dashboards using calculation logic

 Directly in the UI and from Datamarts only

Data loading – automatic

  • By IntegrationManager using HTTP transactions (also in batched versions):

    • loaddata/PX

    • integrate/PX

    • delete/PX

    • massupdate/PX

    • add/PX

  • By creating integration in PlatformManager

  • From a CF logic (few records only) using api.addOrUpdate(), api.update(), api.delete()

  • By IntegrationManager using HTTP transactions:

    • loaddata/DMDS

  • From Price Setting as a Data Load using Data Source templates built-in functionality

  • By creating integration in PlatformManager

Data loading – manual

  • Data upload functionality in PlatformManager

  • By uploading an XLS file in the UI

  • Using Excel Client

  • Data upload functionality in PlatformManager

  • By uploading an XLS file in the UI (Data tab)

  • Using Excel Client

Data truncation

  • Manually, by the Mass Delete button

  • By IntegrationManager

  • Manually, by the Truncate button

  • By Truncate Data Load (supports scheduling)

  • By IntegrationManager

Querying from Groovy



api.find("PX", Filter.equal("name", "SalesPrice"), Filter.equal(...))

Note: api.getBatchInfo() should be used in LPGs and price lists to avoid stability issues



def ctx = api.getDatamartContext() def ds = ctx.getDataSource("SalesDS") -or- def ds = ctx.getDataMart("SalesDM") def query = ctx.newQuery(ds) .select(..) ...


Note: api.getBatchInfo() should be used in LPGs and price lists to avoid stability issues

Selecting distinct values



api.find("PX", 0, 1, null, ["attribute1"], true, filters)







Aggregation: SUM, AVG, MIN, MAX, COUNT











Group by

 Not available





Joins

 No

Exists

Using Filter.custom





Using SQL query

Sorting

 Yes

 Yes

Creating database indexes

 Only for customers having dedicated instance; cannot have many of them

Recommendation for the main PX index is (attribute1, attribute2) or potentially (attribute1, attribute2, attribute3).

Created for the key fields and for each dimension



Found an issue in documentation? Write to us.