Chris Potts
06/17/2025, 10:33 AMJoseph Heun
06/17/2025, 11:36 AMJoseph Heun
06/17/2025, 11:43 AMChris Potts
06/17/2025, 12:33 PMJoseph Heun
06/17/2025, 1:02 PMChris Potts
06/18/2025, 10:34 AMJoseph Heun
06/18/2025, 10:35 AMChris Potts
06/18/2025, 10:35 AMTj Wood
06/18/2025, 10:52 AMSELECT CASE
WHEN COALESCE("t2"."def_m_0881e06adc02c444b9a435e7abd3ed8d", FALSE)
THEN "t2"."m_0881e06adc02c444b9a435e7abd3ed8d"
ELSE NULL
END AS "m_1",
CASE
WHEN COALESCE("t6"."def_m_2e91a40b57e4e88d8a59f1340b416d30", FALSE)
THEN "t6"."m_2e91a40b57e4e88d8a59f1340b416d30"
ELSE NULL
END AS "m_2"
FROM (
SELECT AVG("AR_SalesInvoices"."Total Net") AS "m_0881e06adc02c444b9a435e7abd3ed8d",
TRUE AS "def_m_0881e06adc02c444b9a435e7abd3ed8d"
FROM "autoflow_dev"."AR_SalesInvoices"
INNER JOIN "autoflow_dev"."AR_JobControl" ON "AR_SalesInvoices"."jobid" = "AR_JobControl"."jobid"
AND "AR_SalesInvoices"."sitecd" = "AR_JobControl"."sitecd"
WHERE "AR_JobControl"."Invoiced Date" >= CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP)
AND "AR_JobControl"."Invoiced Date" < (CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP) + (INTERVAL '1 month'))
AND "AR_SalesInvoices"."Labour Net" <> 0
AND "AR_JobControl"."Job Status" NOT IN (
'CANCELLED',
'WRITE-OFF'
)
AND (
"AR_JobControl"."Vehicle WriteOff" IS NULL
OR "AR_JobControl"."Vehicle WriteOff" <> 'Yes'
)
GROUP BY CAST(NULL AS INTEGER)
) AS "t2"
FULL JOIN (
SELECT AVG("AR_SalesInvoices0"."Total Net") AS "m_2e91a40b57e4e88d8a59f1340b416d30",
TRUE AS "def_m_2e91a40b57e4e88d8a59f1340b416d30"
FROM "autoflow_dev"."AR_SalesInvoices" AS "AR_SalesInvoices0"
INNER JOIN "autoflow_dev"."AR_JobControl" AS "AR_JobControl0" ON "AR_SalesInvoices0"."jobid" = "AR_JobControl0"."jobid"
AND "AR_SalesInvoices0"."sitecd" = "AR_JobControl0"."sitecd"
WHERE "AR_JobControl0"."Invoiced Date" >= (CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP) + (INTERVAL '-1 month'))
AND (
"AR_JobControl0"."Invoiced Date" = (("AR_JobControl0"."Invoiced Date" + (INTERVAL '-1 month')) + (INTERVAL '1 month'))
AND "AR_JobControl0"."Invoiced Date" < ((CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP) + (INTERVAL '-1 month')) + (INTERVAL '1 month'))
)
AND (
"AR_JobControl0"."Vehicle WriteOff" <> 'Yes'
AND (
"AR_JobControl0"."Job Status" NOT IN (
'CANCELLED',
'WRITE-OFF'
)
AND "AR_SalesInvoices0"."Labour Net" <> 0
)
)
GROUP BY CAST(NULL AS INTEGER)
) AS "t6" ON TRUE
WHERE COALESCE("t2"."def_m_0881e06adc02c444b9a435e7abd3ed8d", FALSE)
OR COALESCE("t6"."def_m_2e91a40b57e4e88d8a59f1340b416d30", FALSE);
This is the query generated by gooddata that takes 8 minutes to run.
The issue appears to be with this section of the previous period join -
"AR_JobControl0"."Invoiced Date" = (("AR_JobControl0"."Invoiced Date" + (INTERVAL '-1 month')) + (INTERVAL '1 month'))
Which doesn't seem to be relevant in calculating the previous period date range.
If you take this section out - the query runs within 1.2 seconds.
SELECT CASE
WHEN COALESCE("t2"."def_m_0881e06adc02c444b9a435e7abd3ed8d", FALSE)
THEN "t2"."m_0881e06adc02c444b9a435e7abd3ed8d"
ELSE NULL
END AS "m_1",
CASE
WHEN COALESCE("t6"."def_m_2e91a40b57e4e88d8a59f1340b416d30", FALSE)
THEN "t6"."m_2e91a40b57e4e88d8a59f1340b416d30"
ELSE NULL
END AS "m_2"
FROM (
SELECT AVG("AR_SalesInvoices"."Total Net") AS "m_0881e06adc02c444b9a435e7abd3ed8d",
TRUE AS "def_m_0881e06adc02c444b9a435e7abd3ed8d"
FROM "autoflow_dev"."AR_SalesInvoices"
INNER JOIN "autoflow_dev"."AR_JobControl" ON "AR_SalesInvoices"."jobid" = "AR_JobControl"."jobid"
AND "AR_SalesInvoices"."sitecd" = "AR_JobControl"."sitecd"
WHERE "AR_JobControl"."Invoiced Date" >= CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP)
AND "AR_JobControl"."Invoiced Date" < (CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP) + (INTERVAL '1 month'))
AND "AR_SalesInvoices"."Labour Net" <> 0
AND "AR_JobControl"."Job Status" NOT IN (
'CANCELLED',
'WRITE-OFF'
)
AND (
"AR_JobControl"."Vehicle WriteOff" IS NULL
OR "AR_JobControl"."Vehicle WriteOff" <> 'Yes'
)
GROUP BY CAST(NULL AS INTEGER)
) AS "t2"
FULL JOIN (
SELECT AVG("AR_SalesInvoices0"."Total Net") AS "m_2e91a40b57e4e88d8a59f1340b416d30",
TRUE AS "def_m_2e91a40b57e4e88d8a59f1340b416d30"
FROM "autoflow_dev"."AR_SalesInvoices" AS "AR_SalesInvoices0"
INNER JOIN "autoflow_dev"."AR_JobControl" AS "AR_JobControl0" ON "AR_SalesInvoices0"."jobid" = "AR_JobControl0"."jobid"
AND "AR_SalesInvoices0"."sitecd" = "AR_JobControl0"."sitecd"
WHERE "AR_JobControl0"."Invoiced Date" >= (CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP) + (INTERVAL '-1 month'))
AND ("AR_JobControl0"."Invoiced Date" < ((CAST(TO_TIMESTAMP('2025-5', 'YYYY-MM') AS TIMESTAMP) + (INTERVAL '-1 month')) + (INTERVAL '1 month'))
)
AND (
"AR_JobControl0"."Vehicle WriteOff" <> 'Yes'
AND (
"AR_JobControl0"."Job Status" NOT IN (
'CANCELLED',
'WRITE-OFF'
)
AND "AR_SalesInvoices0"."Labour Net" <> 0
)
)
GROUP BY CAST(NULL AS INTEGER)
) AS "t6" ON TRUE
WHERE COALESCE("t2"."def_m_0881e06adc02c444b9a435e7abd3ed8d", FALSE)
OR COALESCE("t6"."def_m_2e91a40b57e4e88d8a59f1340b416d30", FALSE);
This redundant section of code appears within each visualisation that utilises your "Previous Period" feature and causes speed issues in all of them when the period is greater than "This Week".
Removing the previous period feature from the affected visualisations returns the data instantly.
@HayleyJoseph Heun
06/18/2025, 10:56 AMJoseph Heun
06/18/2025, 11:02 AM