\r\nThe full report is available for free download here, but a sneak peak of the first of five tips follows. \r\n \r\nAddress out-of-stocks by leveraging customer data. Perhaps the biggest expectation of omnichannel customers — as it has always been for brick-and-mortar shoppers — is for retailers to maintain high in-stock levels. In an omnichannel world, that means not just regular store inventory but also products ordered online and fulfilled by the store or the warehouse. Consumers facing an out-of-stock situation no longer have to settle for the disappointment of substitutions or waiting for replenishment — they can quickly check their phone for brick-and-mortar or online alternatives. \r\n \r\nOut-of-stocks in grocery stores still hover around 8% of items on a consumer’s shopping list. According to Lois Marr Fruhwirth North American grocery product supply associate director, Procter & Gamble, consumers generally follow a three-strikes-and-you’re-out rule in responding to out-of-stocks. “The first time she is faced with an out-of-stock, 70% of the time she will substitute. The second time, there is an equal probability that she is going to substitute, make no purchase whatsoever, or change stores. By the third time, she is 70% likely to change stores.” \r\n \r\nMany retailers use computer assisted ordering to drive replenishment to store shelves and another system to drive replenishment to the warehouse. Another best practice is the joint use of real-time store data by retailers and suppliers. By sharing data, retailers can help manufacturers meet consumers’ expectations for more availability, choice and faster delivery. \r\n \r\nFor a complete examination of the topic and to view the remaining four tips please download the free report."}]}};
const country = "US";
const language = "en-US,en;q=0.5";
const SITE_LANGUAGE = "en";
const siteName = "RIS News";
const userRoles = ["anonymous"];
const userUid = 0;
const indexName = "risnews";
window.dataLayer = window.dataLayer || [];
const data = {};
data.entityTaxonomy = {};
const contentTypes = [
"article",
"blog",
"bulletin",
"embed_page",
"landing_page",
"event",
"image",
"page",
"product",
"whitepaper",
"video",
"tags",
];
if (
routeInfo &&
"bundle" in routeInfo &&
contentTypes.includes(routeInfo["bundle"])
) {
data.entityBundle = routeInfo.bundle;
data.entityTitle = `${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 toxonomy 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);
}
})();
5 Tips for Shifting to a Customer-Driven Supply Chain
5 Tips for Shifting to a Customer-Driven Supply Chain
9/22/2014
As retailers begin to embrace the customer-centric philosophy the supply chain needs to evolve to keep up with the pace of change. RIS News' recently released "Making the Shift to a Customer-Driven Supply Chain" highlights five things retailers can do to optimize their supply chains for the new retail reality.
The full report is available for free download here, but a sneak peak of the first of five tips follows.
Address out-of-stocks by leveraging customer data. Perhaps the biggest expectation of omnichannel customers — as it has always been for brick-and-mortar shoppers — is for retailers to maintain high in-stock levels. In an omnichannel world, that means not just regular store inventory but also products ordered online and fulfilled by the store or the warehouse. Consumers facing an out-of-stock situation no longer have to settle for the disappointment of substitutions or waiting for replenishment — they can quickly check their phone for brick-and-mortar or online alternatives.
Out-of-stocks in grocery stores still hover around 8% of items on a consumer’s shopping list. According to Lois Marr Fruhwirth North American grocery product supply associate director, Procter & Gamble, consumers generally follow a three-strikes-and-you’re-out rule in responding to out-of-stocks. “The first time she is faced with an out-of-stock, 70% of the time she will substitute. The second time, there is an equal probability that she is going to substitute, make no purchase whatsoever, or change stores. By the third time, she is 70% likely to change stores.”
Many retailers use computer assisted ordering to drive replenishment to store shelves and another system to drive replenishment to the warehouse. Another best practice is the joint use of real-time store data by retailers and suppliers. By sharing data, retailers can help manufacturers meet consumers’ expectations for more availability, choice and faster delivery.
For a complete examination of the topic and to view the remaining four tips please download the free report.