Power BI: Mitä raportteja meillä on? Mistä raporttiemme data tulee?

Millä raporteilla on lähteenä käytöstä poistuva SQL palvelin? Ketkä hallinnoivat näitä raportteja? Onko tähän valmista ratkaisua?

Tässä blogitekstissä käydään läpi yksi ratkaisu yllämainittuihin kysymyksiin tai esimerkiksi ratkaisu koko Power BI ympäristön automaattiseen dokumentointiin. Blogissa näytetään miten PowerShellillä saadaan organisaation kaikkien ryhmien (groups, workspace), niiden datamallien ja datalähteiden tiedot automaattisesti helppoon muotoon.

Oikeudet

Jos tarvitaan pääsy koko organisaation tietoihin, on oltava Power BI Admin oikeudet, mikä on mahdollista saada O365 admin portaalin kautta. Muussa tapauksessa omilla tunnuksilla pääsee käsiksi niihin tietoihin mihin omilla tunnuksilla on oikeudet.

(ohjeet admin oikeuksien saamiseksi: https://docs.microsoft.com/en-us/power-bi/service-admin-role)

PowerShell ISE ja asennus

Seuraavaksi tarvitaan PowerShell ISE ja vielä admin oikeuksilla. Tämä löytyy suoraan Windows 10 käyttöjärjestelmästä:

Lisäksi pitää asentaa Power BI moduuli PowerShelliin

Kirjoitetaan:

 Install-Module -Name MicrosoftPowerBIMgmt 

tekstikenttään, maalataan kyseinen teksti ja aja valinta (Run Selection)

Jos et käynnistänyt adminoikeuksilla PowerShelliä tulee jotain tämän näköistä:

Jos pyytää hyväksyntää asennukselle se toki annetaan:

Kysymys saattaa myös olla PowerShellin puolelle, jolloin pitää painaa y ja Enter.

Power BI rajapintojen käyttö

Seuraavaksi kirjaudutaan sisään komennolla:

 Login-PowerBI 

(Valitaan teksti ja painetaan, aja valinta)

Tämän ajamalla tulee tavallinen O365 kirjautumisikkuna, johon kirjaudutaan omalla/admin tunnuksella.

Jos kaikki meni hyvin, niin pitäisi näkyä kirjautumistiedot kyseisen tunnuksen ympäristöstä.

Kokeilumielessä voi ajaa(vastaavasti kuin edellä):

 Get-PowerBIWorkspace 

Saadaan taulukko työtiloista jokseenkin tämän näköisenä:

Hienoa nyt tiedämme kaikki organisaation työtilat, ja meillä on vastaus kysymykseen mitä työtiloja organisaatiossamme on.
Lisäksi jos haluamme tallentaa tuloksen muistiin ja näyttää tuloksen ja laskea työtilojen määrä onnistuu se ajamalla tämä koodi:


$items = Get-PowerBIWorkspace
$items
$items.Count

Vastaavat ohjeet:
https://powerbi.microsoft.com/en-us/blog/announcing-apis-and-powershell-cmdlets-for-power-bi-administrators/
https://www.youtube.com/watch?v=SQ7ufcRayYY

Miten saada kaikki hyödyllinen data helppoon muotoon?

Tässä kohtaa huomataan nopeasti, että listasta tuli melko pitkä. Lisäksi siitä puuttuu tietoja kuten esimerkiksi mitä datalähteitä työtilassa käytetään ja sitä on oikeastaan lähes mahdotonta hyödyntää millään järkevällä tavalla. Toistaiseksi ei ole olemassa komentoa, mikä hakisi kaikki tiedot mitkä meitä tässä kohtaa voisi kiinnostaa ja tekisi niistä kaunista listaa.

Eli teimme tästä valmiin ratkaisun!

Ohje: 

  1. Kopioi koko koodi PowerShelliin. (Koodi ohjeiden jälkeen)
  2. Muuta parametrikohdasta osoitetta niin että se osoittaa omalla koneella olevaan kansioon mihin haluat tallentaa datan.
  3. Valitse koko koodi ja aja se samoin kuin on edellisissä kohdissa tehty.
  4. Ajoin aikana ja sen jälkeen pitäisi näyttää tältä: Workspace tarkoittaa työtilaa. Merkin” /” jälkeen näkee kuinka monta on viellä jäljellä. RowNbr kertoo montako datariviä on haettu.
  5. Avaa CSV tiedosto esimerkiksi Power BI:llä kansiosta, jonka määrittelit kohdassa 2 ja selvitä helposti vastaukset otsikossa mainittuihin kysymyksiin.

 

Ohessa on PowerShell koodi, mikä käy läpi kaikki työtilat, niiden datamallit ja datamallien lähteet, sekä kirjoittaa tiedot CSV tiedostoon.


#Parameters:
$CSV = "C:\Users\KristjanVaalberk\Desktop\AllGroupsDatasetsSources.csv" # location and name for the csv file

#Loop All workspaces, datasets, sources and save to CSV

"Start Get Datasources"
$CountRows = 0
$CountWorkspaces = 0
$workspaces = Get-PowerBIWorkspace -Scope Organization #All workspaces
$workspacesTotal = $workspaces.count
"Total workspaces :" + $workspacesTotal
$GroupDatasetSource = New-Object System.Collections.ArrayList
$workspaces | ForEach-Object -Process{ ## for every workspace/groups
    $Workspace = $_  
    $CountWorkspaces++
    "Workspace: " + $CountWorkspaces + "/" + $workspacesTotal
    $GroupDatasets = Get-PowerBIDataset -Scope Organization -Workspaceid $_.id ## get all datasets in groups/workspace and save to $GroupDatasets (array)
    IF($GroupDatasets.count -eq 0) { #group has no datasets
        $i2 = 0
        Do { # Loop all users in group
            $temp = "" | select "GroupId", "GroupName", "GroupDescription","GroupType", "GroupState", "GroupIsReadOnly", "GroupIsOrphaned", "GroupIsOnDedicatedCapacity", 
                "GroupCapacityId", "GroupUserPrincipalName", "GroupAccessRight" ,  "Datasetid", "Datasetname", "DatasetaddRowsAPIEnabled", "DatasetconfiguredBy", "DatasetisRefreshable", "DatasetisEffectiveIdentityRequired", 
                "DatasetisEffectiveIdentityRolesRequired", "DatasetisOnPremGatewayRequired" ,"SourceName","SourceConnectionString","SourceDatasourceType","SourceConnectionDetails",
                "SourceGatewayId","SourceDatasourceId"
            $temp.GroupId = $Workspace.id
            $temp.GroupName = $Workspace.Name
            $temp.GroupDescription = $Workspace.Description
            $temp.GroupType = $Workspace.Type
            $temp.GroupState = $Workspace.State
            $temp.GroupIsReadOnly = $Workspace.IsReadOnly
            $temp.GroupIsOrphaned = $Workspace.IsOrphaned
            $temp.GroupIsOnDedicatedCapacity = $Workspace.IsOnDedicatedCapacity
            $temp.GroupCapacityId = $Workspace.CapacityId
            IF($Workspace.users.AccessRight.count -eq 1) {
                $temp.GroupAccessRight = $Workspace.users.AccessRight
                $temp.GroupUserPrincipalName = $Workspace.users.UserPrincipalName
            }
            Elseif ($GroupDatasets.users -eq $null){
                $temp.GroupAccessRight = 'NotFound'
                $temp.GroupUserPrincipalName = 'NotFound'
            }
             Else {
                $temp.GroupAccessRight = $Workspace.users.AccessRight[$i2]
                $temp.GroupUserPrincipalName = $Workspace.users.UserPrincipalName[$i2]
            }
        
            $temp.Datasetid = 'NotFound'
            $temp.Datasetname = 'NotFound'
            $temp.DatasetaddRowsAPIEnabled = 'NotFound'
            $temp.DatasetconfiguredBy = 'NotFound'
            $temp.DatasetisRefreshable = 'NotFound'
            $temp.DatasetisEffectiveIdentityRequired = 'NotFound'
            $temp.DatasetisEffectiveIdentityRolesRequired = 'NotFound'
            $temp.DatasetisOnPremGatewayRequired = 'NotFound'

            $temp.SourceName   = 'NotFound'  
            $temp.SourceConnectionString = 'NotFound'
            $temp.SourceDatasourceType = 'NotFound'
            $temp.SourceConnectionDetails = 'NotFound'
            $temp.SourceGatewayId  = 'NotFound'
            $temp.SourceDatasourceId  = 'NotFound'
            
            $GroupDatasetSource.Add($temp) | Out-Null

            $CountRows++
            "RowNbr :" + $CountRows

            $i2++

        } While ($i2 -le $Workspace.users.AccessRight.count-1)      
         
     }

        $GroupDatasets | ForEach-Object -Process{ #for all datasets
            $Datasets = $_
         
            $DatassetCount = $Datasets.count
            $Datasets  | ForEach-Object -Process{ #all sources in dataset
                $Source = Get-PowerBIDatasource -DatasetId $_.id -ErrorAction SilentlyContinue 
               
                $SourceCount = $Source.count 
                $i = 0
                Do {
                     $i2 = 0
                    Do { # Loop all users in group

                        $temp = "" | select "GroupId", "GroupName", "GroupDescription","GroupType", "GroupState", "GroupIsReadOnly", "GroupIsOrphaned", "GroupIsOnDedicatedCapacity", 
                                "GroupCapacityId" , "GroupUserPrincipalName", "GroupAccessRight", "Datasetid", "Datasetname", "DatasetaddRowsAPIEnabled", "DatasetconfiguredBy", "DatasetisRefreshable", "DatasetisEffectiveIdentityRequired", 
                                "DatasetisEffectiveIdentityRolesRequired", "DatasetisOnPremGatewayRequired" ,"SourceName","SourceConnectionString","SourceDatasourceType","SourceConnectionDetails",
                                "SourceGatewayId","SourceDatasourceId"

                        $temp.GroupId = $Workspace.id
                        $temp.GroupName = $Workspace.Name
                        $temp.GroupDescription = $Workspace.Description
                        $temp.GroupType = $Workspace.Type
                        $temp.GroupState = $Workspace.State
                        $temp.GroupIsReadOnly = $Workspace.IsReadOnly
                        $temp.GroupIsOrphaned = $Workspace.IsOrphaned
                        $temp.GroupIsOnDedicatedCapacity = $Workspace.IsOnDedicatedCapacity
                        $temp.GroupCapacityId = $Workspace.CapacityId
                        IF($Workspace.users.AccessRight.count -eq 1) {
                            $temp.GroupAccessRight = $Workspace.users.AccessRight
                            $temp.GroupUserPrincipalName = $Workspace.users.UserPrincipalName
                        }
                        Elseif ($GroupDatasets.users -eq $null){
                            $temp.GroupAccessRight = 'NotFound'
                            $temp.GroupUserPrincipalName = 'NotFound'
                        }
                         Else {
                            $temp.GroupAccessRight = $Workspace.users.AccessRight[$i2]
                            $temp.GroupUserPrincipalName = $Workspace.users.UserPrincipalName[$i2]
                        }
                        $temp.Datasetid = $Datasets.id
                        $temp.Datasetname = $Datasets.name
                        $temp.DatasetaddRowsAPIEnabled = $Datasets.addRowsAPIEnable
                        $temp.DatasetconfiguredBy = $Datasets.configuredBy
                        $temp.DatasetisRefreshable = $Datasets.isRefreshable
                        $temp.DatasetisEffectiveIdentityRequired = $Datasets.isEffectiveIdentityRequired
                        $temp.DatasetisEffectiveIdentityRolesRequired = $Datasets.isEffectiveIdentityRolesRequired
                        $temp.DatasetisOnPremGatewayRequired = $Datasets.OnPremGatewayRequired
                        IF ($SourceCount -eq 0) {
                            $temp.SourceName   = 'NotFound'  
                            $temp.SourceConnectionString = 'NotFound'
                            $temp.SourceDatasourceType = 'NotFound'
                            $temp.SourceConnectionDetails = 'NotFound'
                            $temp.SourceGatewayId  = 'NotFound'
                            $temp.SourceDatasourceId  = 'NotFound'
           
                            }
                            Else{
                            $temp.SourceName   = $Source[$i].name
                            $temp.SourceConnectionString = $Source[$i].ConnectionString
                            $temp.SourceDatasourceType = $Source[$i].DatasourceType
                            $temp.SourceConnectionDetails = $Source[$i].ConnectionDetails
                            $temp.SourceGatewayId  = $Source[$i].GatewayId
                            $temp.SourceDatasourceId  = $Source[$i].DatasourceId
                            }
                        $GroupDatasetSource.Add($temp) | Out-Null
                        $CountRows++
                        "RowsNbr :" + $CountRows
                        $i2++
                        } While ($i2 -le $Workspace.users.AccessRight.count-1)
                        $i++
                } While ($i -le $SourceCount-1)
            
            }
       }

}

"Total datarows: "+ $CountRows
"Export to CSV: " + $CSV 
$GroupDatasetSource | Export-Csv  $CSV
"All done" 

Muita hyödyllisiä linkkejä:

Power BI Management module in the PowerShell Gallery https://www.powershellgallery.com/packages/MicrosoftPowerBIMgmt

Power BI cmdlets documentation https://docs.microsoft.com/en-us/powershell/power-bi/overview?view=powerbi-ps

Open Source repository for Power BI cmdlets on GitHub https://github.com/Microsoft/powerbi-powershell

Power BI SDK for .NET https://github.com/Microsoft/PowerBI-CSharp

Power BI REST API Reference https://docs.microsoft.com/en-us/rest/api/power-bi/

Quick reference for PowerShell cmdlets, REST APIs, and SDK for Power BI administration https://docs.microsoft.com/en-us/power-bi/service-admin-reference

Power BI Community site https://community.powerbi.com/

Pelaisitko tätä peliä?

Heitetään kolikkoa, jos kruuna saat 1.5 kertaa alkuperäisen sijoituksesi eli 50% kasvua. Jos klaava niin alkuperäinen sijoitus kerrotaan 0.6 eli menetät 40%.

Odotusavo on 1.05 € ensimmäiselle kierrokselle, jos sijoittaisit yhden euron. (0.5×1.5+0.5×0.6= 1.05)

Montako kierrosta pelaisit ja paljonko sijoittaisit peliin alussa?

Ohessa Power BI:llä toteutettu simulaation visuaalisaatio päätöksen tueksi. On simuloitu 1000 henkilöä ja 300 kierrosta. Alkusijoitukseksi on asetettu 1.

Lähde, ajatus ja miksi tällä on väliä: https://www.nature.com/articles/s41567-019-0732-0

HRx 2019 tapahtuma

poissaolojen ennustamista

Osallistuimme HRx 2019 tapahtumaan. Paljon mielenkiintoisia esityksiä, ja erityisesti keskustelut HR-johtajien kanssa olivat hyvin silmiä avaavia. Monella oli kiinnostusta ennustavaan HR-analytiikkaan, erityisesti poissaoloja haluttiin pystyä ennustamaan, ja niistähän toki on merkittävää inhimillistä ja rahallista säästöä saatavissa jos sairauspoissaoloja pystyttäisiin vähentämään. Myös avoin data ’paljonko sairauspoissaolot ovat keskimäärin suomessa/tällä alalla’ tuntui kiinnostavan.

Toinen asia mikä tuli esille oli se että isoillakin firmoilla voi ihan perus-HR analytiikassa olla merkittäviä ongelmia: nuppilukuja ei tahdo saada ruotuun millään. Itse uskon että perussyy tähän on osaajien vähyys Suomessa, sekä se että HR-analytiikkaa päätyy helposti tekemään HR-perusjärjestelmän toimittaja (tai palkanlaskija). Kyseinen malli ei ole toiminut oikein missään muussakaan asiassa, esim. talousraportoinnissa, ja perussyy on se että analytiikka/raportointi on hyvin erilaista ajattelua kuin perusjärjestelmän pyörittäminen.

 

Ennustetietokanta

Useissa projekteissa on tullut eteen tilanne, jossa on olemassa toteumatietoja aikasarjoista ja niistä halutaan tuottaa ennusteita hieman eri tarkkuustasolla kuin toteumat itse ovat. Miten tällaisessa tilanteessa voisi toimia?

Esittelemme alla kaksi vaihtoehtoa, toinen näistä on melko suoraviivainen, mutta molemmat edellyttävät kuitenkin sitä, että normaalia raportointiin optimoitua dimensionaalista tietomallia hieman muokataan erillisellä linkkioliolla (”bridge-table”). Normaalisti dimensiomalli ei tue M:M tyyppisiä relaatioita, vaan kaikki relaatiot dimensioiden välillä menevät faktataulun kautta ja faktan sekä dimension relaatio on M:1.

Tämän erityisen linkkitaulun vuoksi on syytä päättää miten toteuman ja ennusteen lukuja lasketaan suhteessa toisiinsa, laitetaanko joku lisäehto voimaan?

Esimerkkinä datavisualisoinnista käytetään Power BI:n tuottamaa raporttia.

Vaihtoehto 1

Vaihtoehdon tietomalli on alempana.

 

 

Eri versioihin liittyvät ennusteet saadaan näytettyä hyvin alla olevassa kuvaajassa, koska versio on vain yksi dimensioista, jota voi käyttää luokkana. Data tulee yhdestä faktataulusta eli riveillä on sekä ennustetta että toteumaa.

 

Vaihtoehto 2

Vaihtoehdon tietomalli on alempana.

Tietomalli on hieman monimutkaisempi, mutta toisaalta ennusteita ja toteumia ei säilötä samassa taulussa. Data tulee kahdesta faktataulusta ja raportilla käytetään muutamia yhteisiä dimensioita akselien arvojen tai suodatusten määritykseen.

HR – analytiikka: henkilöstön vaihtuvuus

HR-analytiikka tarjoaa työkaluja yritysten HR – toiminnolle sekä liiketoimintajohdolle. Aiempi HR – analytiikan perusasioihin johdattava kirjoitus löytyy täältä.

Työntekijöiden menettäminen aiheuttaa yrityksille aina kuluja kahdella vähintään kahdella tapaa. Toisaalta rekrytointi vaatii aina mainontaa, haastatteluja ja muita ponnisteluja onnistuakseen, ja toisaalta uusi työntekijä aluksi opettelee tehtäviään ennenkuin hänen työpanoksensa on vanhan konkarin tasolla. Toki on joitain yrityksiä jotka haluavat pitää normaalia suuremman vaihtuvuuden, mutta tyypillisesti vaihtuvuus tarkoittaa kuluja ja näin yritykselle on olennaista ensinnäkin pystyä seuraamaan vaihtuvuutta (vaihtuvuusprosenttia), ja toisekseen pystyä tarkentamaan onko vaihtuvuus erityisen suurta tietyssä osassa organisaatiota.

Vaihtuvuutta vähentää luonnollisesti hyvät työolosuhteet, mielekkäät työtehtävät, koulututtautumismahdollisuudet sekä uralla etenemismahdollisuudet sekä markkinaa korkeampi palkkataso. Olennaista onkin pystyä mittaamaan sekä itse vaihtuvuusprosentti, myös vaihtuvuuden kustannukset: paljonko rekrytointi maksaa? Mitä uuden työntekijän kouluttaminen maksaa? Voiko palkkatasoa nostamalla vähentää vaihtuvuutta?

Vaihtuvuusprosentti

Vaihtuvuutta seuratessa tarkastellaan sekä aloittaneiden ja lopettaneiden työntekijöiden määrää. Lisäksi lasketaan ns. vaihtuvuusprosentti (lähtijäprosentti) joka saadaan jakamalla vuoden aikana lähteneiden työntekijöiden määrä vuoden keskimääräisellä työntekijämäärällä. Prosentti voidaan laskea myös jakaa kuukausille ottamalla kuun aikana lähteneiden määrä ja jakamalla kuun alun ja lopun keskimääräisellä työntekijämäärällä (headcountilla). Oleellista on myös mahdollisuus porautua
organisaation eri osiin, sekä esimerkiksi tehtävänkuviin sekä positioihin ja katsoa myös miten paljon organisaatiossa pitkään töissä olleita lähtee pois. Yleensä määräaikaiset työntekijät jätetään peruslähtijäprosentista pois.

Erityisiä teknisiä ongelmia vaihtuvuusprosentin laskemiselle voivat aiheuttaa työntekijät, joilla on useita samanaikaisia työsopimuksia (voi näkyä jakajassa sekä lähtijämäärässä) sekä tilanteet, joissa HR-perusjärjestelmään perustetaan uusi työsopimus tehtävänkuvaa vaihdettaessa. Tällöin näyttää siltä että edellinen työsopimus on lopetettu vaikka todellisuudessa työntekijä on jatkuvasti yhtiön palveluksessa. Analytiikkaharjoituksen alussa myös ajassa muuttuvat tiedot kuten kustannuspaikka, ikä ja työnkuva voivat aiheuttaa hankaluuksia.

Lähdön syyt

Lähtijöitä sekä lähtijäprosenttia tulee olla mahdollista jaotella myös lähdön syyn mukaan. Lähdön syynä eläköityminen on eri asia, kuin vapaaehtoinen lähteminen tai irtisanominen. Mielenkiintoista on myös katsoa yrityksessä vain vähän aikaa työskennelleiden osuutta lähtijöiden kokonaismäärästä. On myös helppo nähdä, että jos pitkään yrityksessä työskennelleitä avainhenkilöitä alkaa lähtemään, on jotain mennyt pieleen ja yrityksen on ryhdyttävä toimiin välittömästi. Syyt henkilöstön vaihtuvuuden yllättäville muutoksille voivat johtua myös työntekijästä katsoen ulkopuolelta tulevista asioista kuten yrityksen johdon vaihtuminen, yrityskaupat tai laaja negatiivinen julkisuus johtuen vaikkapa oikeusjutusta yritystä vastaan.

Organisaatio menestyy aina henkilöstön työpanoksella, siksi oikeiden henkilöiden rekrytoiminen ja pitäminen on tärkeää.

Jos haluat kehittää HR – analytiikkaa tai jopa ottaa käyttöön uudenlaisia ratkaisuja, niin ota yhteyttä myyntiimme!

myynti@readysolutions.fi

+358451374850

Unit Economics

      Mitä tarkoittaa unit economics?

Unit economics (UE) eli yksikkötalouslaskelma on yrityksen liiketoimintamalli pienoiskoossa, esimerkiksi kuvaten tietyn segmentin yksittäisen asiakkaan tuottamia tuottoja ja kuluja.

Tom Mohr on kuvannut tällaista mallia koko liiketoiminnan perustaksi.

Asko Kauppinen kirjoitti Tom Mohrin kirjasta aiemmin arvostelun Medium.com – julkaisualustalle.

Yksikkötalouslaskelma on ollut startup – maailmassa sijoittajien keskeinen tapa arvioida erilaisten sijoituskohteiden liiketoiminnan potentiaalista arvoa, mutta sillä on selkeästi käyttöä mille tahansa muullekin yritykselle.

Datan näkökulmasta tällaisen laskelman tekeminen on kuitenkin haasteellista koska yrityksen talousjärjestelmän pitäisi pystyä tuottamaan riittävällä tarkkuudella olevaa dataa, jota sitten vielä jalostetaan laskelman vaatimaan muotoon.

 

 

                Unit economics on liiketoimintamallin perusta

 

Keskeiset metriikat, jotka muodostavat yksikkötalouslaskelman ytimen, ovat yksikön elinkaariarvo (LTV) sekä hankintakustannus (CAC).

Tyypillisesti nämä metriikat halutaan vielä pystyä hajottamaan muutaman luokittelevan tekijän (dimension) suhteen:

-kanava

-tuotekokonaisuus

-segmentti

-maa

-valuutta

-yksikkökomponentti

-aika

 

Näiden tietojen perusteella liiketoimintajohto näkee, onko toiminta kannattavaa, millä tasolla se on kannattavaa ja millaisia rahoitustarpeita voi seurata nopeasta kasvusta.

Kirjanpidolliset tappiot eivät ole välttämättä osoitus jonkun liiketoimintamallin epäonnistumisesta, yrityksen arvoa määrittelevän analyytikon on syytä mennä syvemmälle lukuihin kuten tämä esimerkki  osoittaa.

 

Unit economics kokonaisuutena

 

UE laskelman yksikön taso riippuu liiketoiminnan luonteesta, monesti asiakastaso summattuna yli sopimusjaksojen tai yksittäisten tapahtumien on järkevä lähtökohta. Dimensioiden avulla voidaan huomioida sellainen tilanne, jossa asiakkuuden hankinta on tapahtunut esimerkiksi broker – kanavassa ja asiakkuuteen liittyviä sopimuksia on tehty myöhemmin oman asiakkuusmarkkinointikanavan ansiosta.

 

Alla oleva kaavio kuvaa tiivistetysti UE – laskelmaan liittyvät asiat.

 

 

Dimensioita vois olla muitakin, mutta tämä luonnollisesti asettaa vaatimuksia organisaation tietojärjestelmille ja liiketoimintaprosesseille datan laadun suhteen. Asko on havainnut energia-alalla kanavatiedon olevan usein puutteellista, varsinkin kun kyseessä on pitkään asiakkaina olleiden henkilöiden sopimustiedot.

 

Organisaation Business Intelligence välineillä, kuten Power BI:llä, voidaan dataa tuoda lähemmäksi päätöksentekijöitä ja liiketoiminnan kehittäjiä. Esimerkiksi erilaiset ajalliset  profiilit LTV – komponenttien ja CAC:n komponenttien välillä on mahdollista havaita visuaalisesti.

 

Kuitenkin on syytä huomata, että laskelmat ovat hyvin toimialaspesifejä, tällaista taloudellista mallia tekevien on syytä ymmärtää hyvin eri komponenttien merkityksen juuri kyseisessä tilanteessa.

 

 Unit economics – esimerkkejä

 

Ulkomainen kulutusluottoyhtiö hankkii alkuvaiheessa sopimuksia hyödyntäen lainanvälityspalvelua, joka on esimerkki broker – kanavasta sekä toisaalta tulosperusteista affiliaattimarkkinointia. Luottoyhtiö tulkitsee asiakkuuden olevan UE – laskelman yksikön eikä yksittäisen sopimuksen. LTV:hen vaikuttavat tuotot ovat korkokate, mahdolliset luotonperustamiskustannukset, kuukausimaksut yms. LTV:hen vaikuttavat kulut ovat hakemukseen kohdistuvat suorat kulut, yrityksen laskennallinen pääomakustannus sekä luottotappiovaraus. CAC:hen eli hankintakustannukseen vaikuttaa suoraan sopimuksen syntymisvaiheessa kolmansille osapuolille maksetut komissiot ja palkkiot.

 

Myöhemmässä vaiheessa yritys hyödyntää kertynyttä asiakasrekisteriään suoraan sähköpostimarkkinointiin ja saa osan asiakkaistaan tekemään uuden lainasopimuksen tai avaamaan talletustilin. Näin yrityksen kannalta relevantit kanavat ovat broker, affiliate ja oma asiakkuusmarkkinointi. Näillä kaikilla on merkitystä yrityksen UE – laskelmissa LTV:n muodostuksessa ja hankintakustannusten (CAC) syntymisessä.

 

Uusi markkinoille tuleva pieni sähkönmyyntiyhtiö hankkii sopimuksia hyödyntäen erilaisia broker – portaaleja tai vertailusivustoja, lyhyen alennusvaiheen jälkeen hintoja aletaan nostaa reippaasti, jotta haluttu katetaso saavutetaan. Sähkönmyyntiyhtiö tulkitsee asiakkuuden olevan UE – laskelman yksikön eikä suinkaan yksittäisen sopimuksen. LTV:hen vaikuttavat tuotot ovat perusmaksut, energiamaksut sekä mahdolliset lisäpalvelut. LTV:hen vaikuttavat kulut ovat sähkönhankinnan kustannukset sekä mahdolliset kulut erilaisista johdannaissopimuksista, joilla hankintaa saatetaan suojata . CAC:hen eli hankintakustannukseen vaikuttaa suoraan sopimuksen syntymisvaiheessa kolmansille osapuolille maksetut komissiot ja palkkiot.

Myöhemmässä vaiheessa yrityksen asiakkuusmarkkinointi sekä mahdollinen ostettu media on suuremmassa roolissa asiakkaiden pysyvyyden tai hankinnan varmistamisessa.

 

    Lähde kehittämään liiketoimintaasi!

 

Jarkko Sahlman ja Asko Kauppinen ovat Ready Solutions Oy:n partnereita ja kokeneita asiantuntijoita liiketoiminnan kehittämisen ratkaisujemme alueella. Jarkolla on pitkä kokemus energia-alan myynnin – ja riskienhallinnan johtotehtävistä sekä aiempaa controller – kokemusta teollisuudesta. Asko on koneoppimisen ja data science ratkaisujen kehittämisestä vastaava konsultti Ready Solutions Oy:ssä.

Jos haluat tietää lisää, miten tällainen taloudellinen malli on mahdollista toteuttaa, niin ota yhteyttä myyntitiimiimme.

myynti@readysolutions.fi

+358451374850

 

Voit myös ottaa yhteyttä Askoon tai Jarkkoon!

Asko.kauppinen@readysolutions.fi

Jarkko.sahlman@readysolutions.fi

Data Platform ja Data Analytics

Ready Solutions Oy sai äskettäin Microsoft Silver Partner statuksen osa-alueilta Data Platform ja Data Analytics. Mitä tällainen Microsoftin kokonaisuus pitää sisällään?

Palveluita datan tallentamiseen, jalostamiseen ja informaation tuottamiseen

Microsoftilla on erittäin vahva tarjoama erilaisten datapalveluiden osalta ja uskomme että asiakkaamme hyötyvät näiden laajemmasta käyttöönotosta. Lisäksi uusien palveluiden hyödyntäminen voi tapahtua monissa tapauksissa ilman että sovelluksia tarvitsee rakentaa kokonaan uusiksi.

Azuren Blob Storage tarjoaa joustavan tiedontallennusratkaisun, Table Storage NoSQL ominaisuuksia ja kuitenkin käytössä on tapahtumien hallinnan mahdollistavat Azure SQL Database sekä CosmosDB muiden palveluiden ohella. Luonnollisesti IaaS mallinen virtuaalikoneiden käyttö sekä oman tietokantalisenssin hyödyntäminen on myös mahdollista.

 

Muuttuva sovelluskehitys

 

Sovelluskehitykseen tämä luo uusia mahdollisuuksia, vaikka edelleen monet asiat kuten sovelluksen tietoturva, ovat sovelluskehittäjien vastuulla.

Infrastruktuuriin liittyvät rajoitteet on nyt helpommin ohitettavissa ja toisaalta on mahdollista kokeilla uusia palveluita sekä niiden käyttökelpoisuutta oman liiketoiminnan apuna.

Käsitteet ”Polyglot Persistence” sekä ”Polyglot Programming” kuvaavat uutta maailmaa, jossa sovelluskokonaisuudella voi olla monia osia ja eri osat hyödyntävät sellaisia komponentteja, jotka niiden luonteen mukaisesti ovat tehtäväänsä parhaita.

Näiden kehityskulkujen vuoksi onkin järkevintä keskustella sovellusten tarjoamista liiketoimintapalveluista eikä enää niinkään organisaation liiketoiminnan operoinnin vaatiman infran rajoituksista.

Kysy lisää!

Jos haluat keskustella asiasta ja kysyä miten voisimme auttaa datan hyödyntämisessänne, niin ota yhteyttä myyntiimme:

myynti@readysolutions.fi

+358451374850

 

Projekti-raportointia Power BI:llä

Projekti-raportointia Power BI:llä

Olemme toteuttaneet Projektiportfolioraportti esimerkin, jossa käytetään Microsoftin demo dataa Project Onlinesta ja sitä käsitellään eri tarpeisiin Power BI:llä.

 

Projektien hallinnan kannalta raha on yleensä kuningas ja siksi salkkutasolla olemme keränneet esille koko salkun kustannuksien datan. Esimerkiksi todelliset kustannukset, budjetoidu kustannukset ja viimeisen estimaatin kustannukset.

 

Lisäksi vohvelivalikon   kautta voimme pureutua dataan eri osastojen, projektityyppien tai projektin omistajien näkökulmasta, jolloin ennusteet ja projektit ovat paremmin vertailukelpoisia keskenään.

 

Portfolio kustannus/ päivä visuaalisaatiossa voimme seurata kuinka paljon salkku maksaa / päivä ja miten nämä kustannukset kasautuvat eri aikoihin. Esimerkin sakussa on ennustettu syyskuulle huomattavasti suurempia päiväkustannuksia kuin muulle osaa vuodesta. Olisiko tässä hyvä siirtää joitakin projekteja eri aikaan, jotta kuormitus olisi tasaisempaa? Toteutuneesta näemme, että joka tapauksessa kulut ovat seuranneet enemmän keskimääräistä päivähintaa. Erityisesti tässä raportissa Power BI pääsi osoittamaan vahvuutensa, sillä kyseinen data on projektitasolla Project Onlinessa ei päivätasolla, mitä raportointi vaatisi.

 

Mikäli rahaa käytetään huomattavasti vähemmän kuin mitä on arvioitu, voidaan siitä helposti päätellä, että projektit eivät todennäköisesti etene keskimäärin suunnitellulla nopeudella tai on mahdollisuus vapauttaa varoja muuhun käyttöön tämän vuoden osalta:

 

Koska meillä on käytössä koko projektisalkun tiedot voimme yksinkertaisella eksponentiaalisentasoituksen mallia (exponential smoothing) käyttämällä arvioida kertyviä tulevia kustannuksia ja niiden mahdollista kehittymistä.

 

Yksinkertaisilla liikennevaloilla saadaan projektisalkusta nousemaan esille projektit, mitkä kaipaavat huomiota. Tässä esimerkissä liikennevaloihin on käytetty automaattisia triggereitä perustuen esimerkiksi budjetin ylittämiseen yli 20% (Punainen).

 

Mikäli tilanne vaatii nopeampaa perehtymistä juuri tiettyyn projektiin voi raportilta helposti porautua siihen:

 

Ja nähdä mistä oikein on kyse, missä tilassa projekti on tai missä tilassa projektin välietapit ovat.

 

Projektiraporttia projektipäällikkö voi myös käyttää projektin seuraamiseen. Samalla päästään myös yhteen totuuteen, kun johto ja projektin vastuuhenkilöt näkevät samat tiedot. Tämä myös lisää näiden järjestelmien datan laatua, sillä virheet tulevat helposti näkyviin ja ne voidaan korjata suoraan järjestelmiin mistä ne ovat lähtöisin.

Power BI tarjoaa laajat julkaisuvaihtoedot raporteille kuten tämän raportin julkinen jakaminen osoittaa. Yrityksen sisäisesti julkaisun voidaan tehdä samaan tapaan tai vaikka esimerkiksi applikaation kautta suoraan puhelimeen. Lisäksi raportit on mahdollista toteuttaa niin että raportilla nähdään vain data, mihin on kirjautuneella henkilöllä oikeudet.

Tämän tyyppisen raportin lähteenä voi olla lähes mikä tahansa projekti järjestelmä. Parhaisiin tuloksiin päästään tietenkin ottamalla mukaan dataa suoraan esimerkiksi taloushallinonjärjestelmistä, jolloin projektien todelliset kustannukset voisivat olla lähes reaaliaikaisia. Vastaavasti mitä enemmän järjestelmiä huomioidaan sitä tarkempaa, data on ja sitä lähempänä ennuste voi olla toteumaa. Lisäksi Microsoftin alusta tarjoaa välineet kaikkeen datan hallintaan ja analysointiin, vaikka itse Power BI ei johonkin sovellukseen sellaisenaan toimisi.

Energiankulutuksen joustosta 1

Kohteen riippuvuus lämpötilasta

Yksittäisen kohteen energiankulutuksen aikasarjat ovat useimmiten omasta välittömästä historiastaan, vuodenajasta sekä ulkolämpötilasta riippuvia. Monilla yhtiöillä on mahdollisuus tarkastella yksittäisiä aikasarjoja graafisesti, mutta miten ottaa haltuun koko mittaustietojen kokonaisuus?

Ready Solutions Oy:n näkemyksen mukaan avainasemassa on mittausdatan mahdollisimman automaattinen hyödyntäminen, esimerkiksi koneoppimismenetelmien tuottamien ennusteiden avulla. Ennusteet ja mittausdatassa oleva informaatio täytyisi tiivistää muutamaan keskeiseen tunnuslukuun, joista yhden käsittelemme tässä kirjoituksessa.

 

Käyttötapaukset

Suoran sähkölämmityksen kohteen tapauksessa erilaiset riippuvuuden tunnusluvut tarjoavat sähkön myyjälle ja miksei myös verkkopalveluita tarjoavalle yhtiölle mahdollisuuden esimerkiksi riskiperusteiseen hinnoitteluun.

Kaukolämmön liiketoiminnassa, jossa hinnoittelu perustuu tyypillisesti muutamaan julkisen hinnaston mukaiseen komponenttiin, tällaisten tunnuslukujen avulla voitaisiin hinnoitella verkostokohtaisesti perusmaksuja. Tausta-ajatuksena on, että asiakas maksaa optiosta käyttää energiaa.

Olemme muutamissa tapauksissa rakentaneet kaukolämmön liiketoiminnoille automatisoidut prosessit, jotka tuottavat esimerkiksi tilausvesivirran tai tehon ennusteet.

Näiden suoraan liiketoimintaan liittyvien tapausten lisäksi mittausdatan laadunvarmistuksen näkökulmasta voi käydä läpi erityisen poikkeavia tunnuslukuja.

 

Kaarijousto – Arc Elasticity

Kaarijousto on tunnusluku, joka kohteen energiankulutuksen volyymista riippumattomasti pyrkii tiivistämään lämpötilariippuvuuden.

Jos käytetään yksinkertaista regressiomallia, niin jousto voidaan saada suoraan mallin kertoimia käyttäen. Muussa tapauksessa voidaan tuottaa paikalliset ennusteet ja laskea tulos auki niiden avulla. Molemmat esimerkit on esitetty kaavoina alla olevassa kuvassa.

Yllä olevassa kuvassa E on energiakulutus ja T on lämpötila, indeksoinneilla kuvataan paikallisuutta tai keskiarvoa tietyllä havaintoalueella.

Erityisesti pienten kulutuskohteiden tapauksessa ennusteiden tuottamisessa käytettyjen muuttujien arvojen vaihtelu voi olla suurta ja tuloksia täytyy tarkastella kriittisemmin.

 

Kiinnostaako koneoppiminen ja data-analytiikka energiatoimialalla?

 

Toteutimme Savon Voimalle konseptiimme perustuen useita koneoppimisen (ML) ratkaisuja, joiden kehityksen yhteydessä osoitimme että tällaiset projektit voidaan toteuttaa joustavasti ilman valtavia investointeja. Käy tutustumassa asiakas – caseemme!

 

 

HR Analytiikka – Nuppiluvut ja FTE

Jatkamme tässä aiemman artikkelimme mukaisesti HR – dataan liittyvien asioiden käsittelyä.

Henkilöstön kokonaismäärä (”nuppiluku”) ja FTE:t ovat yksi tärkeimmistä HR  – raportoinnin ja analytiikan perusluvuista, antaen kuvan työntekijöiden määrästä yrityksessä ja missä päin yritystä he työskentelevät. Nuppilukuja käytetään esimerkiksi kun suunnitellaan tarvittavaa henkilöstömäärää tulevaisuuden projekteihin ja tehtäviin, näyttäen nykyisen tarjonnan. Lisäksi nuppiluku/fte on usein jakajana kun lasketaan erilaisia kuluja per henkilö (FTE) tai liikevaihto per henkilö (FTE). Toki myös viranomaisraportointia joutuu tekemään.

Määritelmät
Nuppiluku (HeadCount): Työsuhteessa oleva työntekijä lasketaan nuppiluvuksi 1
FTE: Työntekijöiden määrä täysiaikaisina työntekijöinä (jos työskentelee vain puolet viikosta/kuukaudesta, saa luvun 0.5)

Mistä lähteistä nämä luvut saadaan?
Alla näkyvässä kuvassa näkyy miten johdetut taulut HeadCount ja FTE on kytketty muihin
HR-perusjärjestelmän tauluihin.

Nuppiluvut otetaan yleensä HR-perusjärjestelmän työsuhde-taulusta. Laskelmat tehdään yleensä kuukauden tarkkuudella ja määritelmä voi olla esimerkiksi ’jos henkilöllä on työsuhde voimassa kuun viimeisenä päivänä’ saa hän arvon 1 sille kuukaudelle. Tähän voi lisätä muita versioita tai rajauksi ottamalla pois henkilöt jotka ovat pitkillä poissaoloilla, tai jotka eivät ole varsinaisia työntekijöitä vaan contractoreita (konsultteja) yhtiössä. Alla näkyvä HeadCount taulu on lopullisessa raportointi-muodossa tähtimallissa, jossa Työsuhteen tiedot on tuotu suoraan HeadCount tauluun kiinni. Nuppilukulaskelmissa päänsärkyä voi aiheuttaa työntekijät joilla on konserniin useita työsuhteita yhtäaikaa eri yhtiöihin meneillään. Näitä voi ajatella kaikkia yhtenä HeadCounttina tai sitten jättää mahdollisuuden BI työkalussa katsoa niitä yhtenä tai useana HeadCounttina.

FTE laskelmat menevät eri tavalla kuukausittaisille työntekijöille ja tuntipalkkalaisille. Kuukausipalkkalaisille lähteenä käytetään HR-perusjärjestelmän työsuhde-taulua, ja laskelma eroaa seuraavalla tavalla nuppiluvuista: Henkilö saa arvon 1 FTE ollessaan koko kuun töissä, mutta jos hän on vain puolet kuusta niin arvoksi tulee 0.5. Yleensä HR haluaa FTE:stä eri versioita, esimerkiksi vähentäen kuukauden aikana olleet poissaolot tai vain palkattomat poissaolot. Myös osa-aikaiset työntekijät tulee huomioida.

Tuntipalkkalaisten FTEt otetaan yleensä maksetuista palkoista, joissa siis tulisi näkyä maksetut tunnit. Kuukauden aikana maksetut tunnit jaetaan kuun maksimituntimäärällä, ja jälleen täysiaikainen töissäolo antaa arvon 1. Alla näkyy FTE-taulu tähtimallimuodossa.

Usein FTEt halutaan lisäksi jakaa kustannusjakoperusteella eri kustannuspaikoille, kun taas nuppiluvut saatetaan näyttää vain pääkustannuspaikalla. On oleellista myös huomata miten eri tavoin HR raportointi ja perusjärjestelmän logiikka toimivat. Esimerkiksi jos huomataan että perusjärjestelmässä on virheellisesti työsuhde (henkilöä ei ole todellisuudessa ollutkaan työllistettynä) niin HR-perusjärjestelmään virhe korjataan, mutta jos luvut on tuolla perusteella jo aiemmin raportoitu niin usein lukujen halutaan pysyvän samoina, eikä niiden haluta muuttuvan jatkuvasti vielä vuosien päästä.

Nuppiluku – ja FTE laskelmat saattavat olla monimutkaisia tarkalla tasolla ja onnistunut projekti vaatiikin usein syvää HR-datan käsittelyn ymmärrystä.

Ota yhteyttä myyntiimme, jos HR – dataan liittyvät asiat mietityttävät!

myynti@readysolutions.fi