\nHow do I plan for what my business will face tomorrow?
\nThe four steps to digital transformation
\nHow to dedicate more time on strategic planning vs. tactical issues
\nThe power of external data
\nBuilding vs. buying an analytics platform
\nAnd more...
Peter Breen is editor-in-chief of the Path to Purchase Institute, where he has managed content since its inception in 2003. Before helping to launch the Institute, he spent four years as editor and managing editor of PROMO Magazine and its ancillary products. His experience covering the consumer goods industry also includes four years as an editor at Simba Information, where he managed publications on book publishing, computer advertising, and internet marketing. He is a graduate of the State University of New York at Buffalo, where he earned a B.A. in English and Linguistics and a special minor in Japanese Studies.
\r\n","title":"Editor-in-Chief","picture":{"id":66,"url":"https://assets1.consumergoods.com/s3fs-public/styles/portrait_gallery_item/s3/2023-08/PBreenSmaller.jpg?h=f2c8faad&itok=oUskF3-C","alt":"Breen","width":374,"height":356},"phone":null,"contactForm":false},"digitalEdition":null,"sponsored":false,"taggedPro":null,"teaserImage":{"id":9810,"url":"https://assets1.consumergoods.com/styles/secondary_articles_short/s3/2019-08/Thule_ProRidecarrier_Wingbar%20racks.jpg?itok=f40Gh3lu","width":1200,"height":899,"alt":""},"topics":[{"name":"Supply Chain","url":"/supply-chain"},{"name":"Enterprise Excellence","url":"/enterprise-excellence"},{"name":"Demand Planning","url":"/demand-planning"},{"name":"Forecasting","url":"/forecasting"},{"name":"Enterprise Resource Planning (ERP)","url":"/enterprise-resource-planning-erp"}],"attachedFiles":[]}]},"title":"Forecasting","contentParagraphs":null,"sections":null}; const country = "US"; const language = null; const SITE_LANGUAGE = "en"; const siteName = "Consumer Goods Technology"; const userRoles = ["anonymous"]; const userUid = 0; const indexName = "CG"; const title = "Forecasting | Consumer Goods Technology"; window.dataLayer = window.dataLayer || []; const data = {}; data.entityTaxonomy = {}; const contentTypes = [ "article", "blog", "bulletin", "embed_page", "landing_page", "event", "image", "page", "product", "whitepaper", "video", "tags", "author_profile", "buyers_guide_listing" ]; if ( routeInfo && "bundle" in routeInfo && contentTypes.includes(routeInfo["bundle"]) ) { data.entityBundle = routeInfo.bundle; data.entityTitle = title || `${routeInfo.title} | ${siteName}`; data.entityId = routeInfo.id; data.entityName = routeInfo.author?.uname; data.entityCreated = routeInfo.created; data.sponsored = routeInfo.sponsored; data.sponsor = routeInfo.sponsoringCompany; data.entityType = "node"; data.entityLangcode = SITE_LANGUAGE; data.siteName = siteName; data.drupalLanguage = language; data.drupalCountry = country; data.userRoles = userRoles; data.userUid = userUid; data.entityTaxonomyKeys = {}; data.entityTaxonomyHierarchies = {}; data.parentNaicsCode = {}; data.isPro = false; data.algoliaIndexName = indexName; // Add taxonomy data const taxonomies = { businessTopic: "business_topic", contentType: "content_type", company: "company", marketSegment: "market_segment", }; const getHierarchy = (term, terms = []) => { terms.push({ id: term.id, name: term.name }); if (term.parentTerm != null) { getHierarchy(term.parentTerm, terms); } return terms; }; const getTerms = (term, useApiId = false) => { return { id: useApiId ? term.apiId : term.id, name: term.name }; }; const getKeys = (term) => { return { id: term.id, name: term.apiId }; }; Object.entries(taxonomies).forEach(([key, item]) => { terms = routeInfo[key]; if (terms && terms.length > 0) { data["entityTaxonomy"][item] = terms.map((term) => getTerms(term, key === "company") ); if (key !== "company") { data["entityTaxonomyKeys"][item] = terms.map(getKeys); termGroups = []; terms.forEach((term, termInd) => { termGroups[termInd] = getHierarchy(term); }); data["entityTaxonomyHierarchies"][item] = termGroups; } } }); data["entityTaxonomy"]["tags"] = routeInfo["topics"] || []; // Primary Topic is either the business topic or the top tag. if (routeInfo["businessTopic"]?.length > 0) { data["entityPrimaryTopic"] = routeInfo["businessTopic"][0]["name"]; } else { if (routeInfo["topics"]?.length > 0) { data["entityPrimaryTopic"] = routeInfo["topics"][0]["name"]; } } // Primary and secondary entityNaicsCodes come from the MarketSegment if (routeInfo.marketSegment?.length > 0) { data.entityNaicsCode = {}; data["entityNaicsCode"]["id"] = routeInfo["marketSegment"][0]["id"]; data["entityNaicsCode"]["name"] = routeInfo["marketSegment"][0]["naicsCode"]; if (routeInfo["marketSegment"][0]["parentTerm"] != null) { data["parentNaicsCode"]["id"] = routeInfo["marketSegment"][0]["parentTerm"]["id"]; data["parentNaicsCode"]["name"] = routeInfo["marketSegment"][0]["parentTerm"]["naicsCode"]; } } else { data.entityNaicsCode = []; } if (routeInfo.taggedPro) { data.isPro = routeInfo.taggedPro; } window.dataLayer.push(data); } else if (routeInfo && "vid" in routeInfo) { data.entityBundle = "tags"; data.entityTitle = routeInfo.name; data.entityId = routeInfo.id; data.entityName = routeInfo.author?.uname; data.entityCreated = routeInfo.created; data.entityType = "taxonomy_term"; data.entityLangcode = SITE_LANGUAGE; data.siteName = siteName; data.sponsored = routeInfo.sponsored; data.sponsor = routeInfo.sponsoringCompany; data.drupalLanguage = language; data.drupalCountry = country; data.userRoles = userRoles; data.userUid = userUid; data.algoliaIndexName = indexName; data["entityTaxonomy"]["tags"] = { id: routeInfo["id"], name: routeInfo["name"], }; window.dataLayer.push(data); } })();