Hi there,
Great question! You're absolutely right that using formulas directly on Transaction List properties can have a performance impact, particularly as data volumes grow.
The recommended approach in Pigment is very much in line with what you're used to on other platforms; import your raw data as-is into a Transaction List, and then perform your transformations (date extraction, code identification, hierarchy building, etc.) in Metrics rather than in TL property formulas.
Here's why this matters and some practical guidance:
- Transaction List properties with formulas are evaluated per row, so on large lists they can become a bottleneck and may even cause timeouts after imports.
- Best practice is to keep your TL as a clean, raw data store and use Metrics as your transformation layer. For example, aggregate from the TL once into a first Metric, and then reference that Metric downstream rather than having multiple Metrics each reaching back into the TL.
A few additional tips to keep performance in check:
- Reduce early: Use
FILTER and REMOVE at the start of your formula chains to reduce data volume before heavier operations. - Preserve sparsity: Avoid patterns like
IFBLANK(..., 0) before multiplications — Pigment natively treats blanks as zero in multiplication. - Partition large datasets: If dealing with multiple years of historical data, consider splitting into separate Transaction Lists.
For more details, I'd recommend the following resources: