;

Dalibor dnešních dnů: housle nebo BI?

13. 11. 2012
Doba čtení: 4 minuty

Sdílet

Autor: © Sergej Khackimullin - Fotolia.com
Každá firma dnes potřebuje zpracovat množství dat. K tomu, abychom je dokázali rychle a efektivně analyzovat, potřebujeme stále výkonnější nástroje.

Proto existují specializované nadstavby nad informačními systémy. Jednou z nich je Business Intelligence.

Asi je dnes již zbytečné vysvětlovat od základu, co vlastně BI je a co umí. Proto jen stručně připomeňme: Pomocí BI jsou ve většině případů analyzována data obchodního rázu, zejména údaje o prodejích apod. Důležitými faktory jsou časová období, prodejní sortiment, prodejní kanály, a podobně. BI však lze použít pro analýzu jakéhokoliv typu dat, například marketingových nebo ekonomických.

Pojďme se však podrobněji podívat na některé aktuální trendy v oblasti BI řešení. Jedním z těch nejvýznamnějších je zájem o technologie a postupy BI ve středních a menších společnostech. To znamená, že přibývá nástrojů pro podporu integrace a propojení BI s podnikovými systémy určenými pro tento segment, a tato řešení se stávají levnějšími a dostupnější. Výrobci ERP pro střední a menší společnosti se často touto oblastí zabývají a rozšiřují své aplikace o nástroje podporující tuto oblast.

Dalším významným trendem je změna zaměření aplikací BI. Posun spočívá v jejich rozšiřování směrem od čistě reportingových, zaměřených na sledování finančních ukazatelů, k taktickému a operativnímu řízení. Také se mění přístup z pohledu uživatele, z původního reaktivního reportování na proaktivní analýzy a predikce. To umožňuje, aby Business Intelligence, resp. nástroje BI, byly využívány v širší míře pro rozhodování a řízení na všech úrovních podniku.

Víme, co chceme
Výběr respektive následné zavedení BI nástrojů do provozu můžeme přirovnat například k výběru a zavedení CRM. Žádný z těchto nástrojů nelze vnímat jako produkt, který má přesně stanovené funkce, ke kterým se lze jednoznačně vyjádřit, zda nám respektive naši společnosti vyhovují či nikoliv. Je třeba je chápat jako řešení, tedy komplex know-how, metodiky a produktu. Nezbytnou podmínkou výběru BI je konkrétní představa o použití a přínosech budoucího řešení. Pokud v této oblasti nemáme jasno, je to jednoznačně hlavní překážka úspěšnému výběru a nasazení nástrojů BI.

Kritéria výběru jsou navíc závislá na oblasti, kterou chceme s Business Intelligence v rámci vnitropodnikových procesů řešit. Nicméně vždy platí, že klíčem k úspěchu je seriozní a odborně zdatný dodavatel, který má v této oblasti prokazatelné zkušenosti.  
A o které součásti BI řešení je dnes mezi zákazníky největší zájem? Jednoznačně o funkcionality z oblastí datawarehouse, MIS, manažerské nadstavby a controlling.

BI pro zdravou stravu
Podívejme se nyní na využití Business Intelligence přímo v praxi. Mezi firmy, pro něž je využívání dat životně důležité a proto má ve svém ERP systému HELIOS zavedenou i Business Intelligence, je ProFitness ČR a.s.. Její hlavní činností je prodej doplňků stravy a kosmetiky koncovým spotřebitelům. Provozuje prodejny v mnoha nákupních centrech i v kamenných obchodech po celé České republice. Její maloobchodní síť VITALAND je největším řetězcem zaměřeným na prodej doplňků stravy v ČR.
Informační systém zde používají už od roku 2006. V souvislosti se zmíněným trendem co nejefektivnějšího využívání všech dostupných dat systém zhruba před rokem doplnili modulem Business Intelligence.

„Z celého řešení nejvíc využíváme OLAP kostky,“ vysvětluje Pavel Novák, IT manager společnosti ProFitness a dodává: „Jsou potřebné zejména k vyhodnocování obratů, zisku a statistikám ohledně členské základny či zásob zboží na skladech. Kromě nich hodně využijeme také různé přehledy. Ty slouží zejména pracovníkům marketingu a také v retail managementu a logistice. Od doby, kdy máme k dispozici Business Intelligence se nám výrazně zvýšila efektivita vyhodnocování dat a tím vznikla i nezanedbatelná úspora času.“

Ačkoli stále více firem dobře chápe, že řešení Business intelligence může jim i jejich firmám velmi pomoci a to zejména v dnešní době, kdy konkurence ve všech oblastech značně přitvrdila, je stále ještě patrný rozdíl mezi českými firmami a jejich zahraniční konkurencí působící v ČR nebo českými, které jsou řízeny zahraničními manažery.  Nicméně, jak se říká: „Nouze naučila Dalibora housti“. Čili kdo chce přežít a prosperovat, dříve, či později pochopí, který nástroj mu k tomu pomůže.

Milan Juřen, Produktový manažer systémů HELIOS, Asseco Solutions, a.s.

www.helios.eu

'; document.getElementById('preroll-iframe').onload = function () { setupIframe(); } prerollContainer = document.getElementsByClassName('preroll-container-iframe')[0]; } function setupIframe() { prerollDocument = document.getElementById('preroll-iframe').contentWindow.document; let el = prerollDocument.createElement('style'); prerollDocument.head.appendChild(el); el.innerText = "#adContainer>div:nth-of-type(1),#adContainer>div:nth-of-type(1) > iframe { width: 99% !important;height: 99% !important;max-width: 100%;}#videoContent,body{ width:100vw;height:100vh}body{ font-family:'Helvetica Neue',Arial,sans-serif}#videoContent{ overflow:hidden;background:#000}#adMuteBtn{ width:35px;height:35px;border:0;background:0 0;display:none;position:absolute;fill:rgba(230,230,230,1);bottom:20px;right:25px}"; videoContent = prerollDocument.getElementById('contentElement'); videoContent.style.display = 'none'; videoContent.volume = 1; videoContent.muted = false; const playPromise = videoContent.play(); if (playPromise !== undefined) { playPromise.then(function () { console.log('PREROLL sound allowed'); // setUpIMA(true); videoContent.volume = 1; videoContent.muted = false; setUpIMA(); }).catch(function () { console.log('PREROLL sound forbidden'); videoContent.volume = 0; videoContent.muted = true; setUpIMA(); }); } } function setupDimensions() { prerollWidth = Math.min(iinfoPrerollPosition.offsetWidth, 480); prerollHeight = Math.min(iinfoPrerollPosition.offsetHeight, 320); } function setUpIMA() { google.ima.settings.setDisableCustomPlaybackForIOS10Plus(true); google.ima.settings.setLocale('cs'); google.ima.settings.setNumRedirects(10); // Create the ad display container. createAdDisplayContainer(); // Create ads loader. adsLoader = new google.ima.AdsLoader(adDisplayContainer); // Listen and respond to ads loaded and error events. adsLoader.addEventListener( google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED, onAdsManagerLoaded, false); adsLoader.addEventListener( google.ima.AdErrorEvent.Type.AD_ERROR, onAdError, false); // An event listener to tell the SDK that our content video // is completed so the SDK can play any post-roll ads. const contentEndedListener = function () { adsLoader.contentComplete(); }; videoContent.onended = contentEndedListener; // Request video ads. const adsRequest = new google.ima.AdsRequest(); adsRequest.adTagUrl = iinfoVastUrls[iinfoVastUrlIndex]; console.log('Preroll advert: ' + iinfoVastUrls[iinfoVastUrlIndex]); videoContent.muted = false; videoContent.volume = 1; // Specify the linear and nonlinear slot sizes. This helps the SDK to // select the correct creative if multiple are returned. // adsRequest.linearAdSlotWidth = prerollWidth; // adsRequest.linearAdSlotHeight = prerollHeight; adsRequest.nonLinearAdSlotWidth = 0; adsRequest.nonLinearAdSlotHeight = 0; adsLoader.requestAds(adsRequest); } function createAdDisplayContainer() { // We assume the adContainer is the DOM id of the element that will house // the ads. prerollDocument.getElementById('videoContent').style.display = 'none'; adDisplayContainer = new google.ima.AdDisplayContainer( prerollDocument.getElementById('adContainer'), videoContent); } function unmutePrerollAdvert() { adVolume = !adVolume; if (adVolume) { adsManager.setVolume(0.3); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } else { adsManager.setVolume(0); prerollDocument.getElementById('adMuteBtn').innerHTML = ''; } } function onAdsManagerLoaded(adsManagerLoadedEvent) { // Get the ads manager. const adsRenderingSettings = new google.ima.AdsRenderingSettings(); adsRenderingSettings.restoreCustomPlaybackStateOnAdBreakComplete = true; adsRenderingSettings.loadVideoTimeout = 12000; // videoContent should be set to the content video element. adsManager = adsManagerLoadedEvent.getAdsManager(videoContent, adsRenderingSettings); // Add listeners to the required events. adsManager.addEventListener(google.ima.AdErrorEvent.Type.AD_ERROR, onAdError); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED, onContentPauseRequested); adsManager.addEventListener( google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED, onContentResumeRequested); adsManager.addEventListener( google.ima.AdEvent.Type.ALL_ADS_COMPLETED, onAdEvent); // Listen to any additional events, if necessary. adsManager.addEventListener(google.ima.AdEvent.Type.LOADED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.STARTED, onAdEvent); adsManager.addEventListener(google.ima.AdEvent.Type.COMPLETE, onAdEvent); playAds(); } function playAds() { // Initialize the container. Must be done through a user action on mobile // devices. videoContent.load(); adDisplayContainer.initialize(); // setupDimensions(); try { // Initialize the ads manager. Ad rules playlist will start at this time. adsManager.init(1920, 1080, google.ima.ViewMode.NORMAL); // Call play to start showing the ad. Single video and overlay ads will // start at this time; the call will be ignored for ad rules. adsManager.start(); // window.addEventListener('resize', function (event) { // if (adsManager) { // setupDimensions(); // adsManager.resize(prerollWidth, prerollHeight, google.ima.ViewMode.NORMAL); // } // }); } catch (adError) { // An error may be thrown if there was a problem with the VAST response. // videoContent.play(); } } function onAdEvent(adEvent) { const ad = adEvent.getAd(); console.log('Preroll event: ' + adEvent.type); switch (adEvent.type) { case google.ima.AdEvent.Type.LOADED: if (!ad.isLinear()) { videoContent.play(); } prerollDocument.getElementById('adContainer').style.width = '100%'; prerollDocument.getElementById('adContainer').style.maxWidth = '640px'; prerollDocument.getElementById('adContainer').style.height = '360px'; break; case google.ima.AdEvent.Type.STARTED: window.addEventListener('scroll', onActiveView); if (ad.isLinear()) { intervalTimer = setInterval( function () { // Example: const remainingTime = adsManager.getRemainingTime(); // adsManager.pause(); }, 300); // every 300ms } prerollDocument.getElementById('adMuteBtn').style.display = 'block'; break; case google.ima.AdEvent.Type.ALL_ADS_COMPLETED: if (ad.isLinear()) { clearInterval(intervalTimer); } if (prerollLastError === 303) { playYtVideo(); } break; case google.ima.AdEvent.Type.COMPLETE: if (ad.isLinear()) { clearInterval(intervalTimer); } playYtVideo(); break; } } function onAdError(adErrorEvent) { console.log(adErrorEvent.getError()); prerollLastError = adErrorEvent.getError().getErrorCode(); if (!loadNext()) { playYtVideo(); } } function loadNext() { iinfoVastUrlIndex++; if (iinfoVastUrlIndex < iinfoVastUrls.length) { iinfoPrerollPosition.remove(); playPrerollAd(); } else { return false; } adVolume = 1; return true; } function onContentPauseRequested() { videoContent.pause(); } function onContentResumeRequested() { videoContent.play(); } function onActiveView() { if (prerollContainer) { const containerOffset = prerollContainer.getBoundingClientRect(); const windowHeight = window.innerHeight; if (containerOffset.top < windowHeight/1 && containerOffset.bottom > 0.0) { if (prerollPaused) { adsManager.resume(); prerollPaused = false; } return true; } else { if (!prerollPaused) { adsManager.pause(); prerollPaused = true; } } } return false; } function playYtVideo() { iinfoPrerollPosition.remove(); youtubeIframe.style.display = 'block'; youtubeIframe.src += '&autoplay=1&mute=1'; } }