Yksi päivä keskustelimme töissä siitä, millaista erilaista palautetta työpaikan sisällä olisi mielekästä kerätä. Te tiedätte. Säännöllinen fiilismittari. Puolivuosittainen henkilöstökysely. Mitä näitä nyt kaikilla on.

Kiinnostava ajatus muiden joukossa oli kerätä palautetta työkavereilta. Ja nimenomaan niiltä työkavereilta, joiden kanssa tekee säännöllisesti töitä.

Sellainen työkalu tehdään tietenkin tänään.

Tietojen tallennus – Dataverse for Teams

Luodaan HR tiimissä sijaitsevaan Dataverse for Teamsiin uusi taulu (Colleague feedback), jossa on seuraavat kentät.

  • Feedback target – Palautteen kohde, nimi-sarake (Primary name)
  • Expertise – Miten kokee henkilön osaamisen tason, kokonaisluku
  • Working with – Miten kokee yhteistyön henkilön kanssa, kokonaisluku

Kerättäviä tietoja voi toki olla enemmän tai vähemmän. Riippuu pitkälti siitä, miten usein kyselyä halutaan tehdä.

Palautteen kerääminen – Flow

Miten palautetta käytännössä kerättäisiin? Lyhyen pohdinnan jälkeen päädyn tekemään flow’n, joka lähettää henkilöille säännöllisesti palautepyynnöt Teamsin chat-viesteinä. Viesti sisältää mukautuvan kortin (adaptive card), jolla annetaan palautetta yhdestä henkilöstä.

Työntekijät, joista palautetta pyydetään

Aloitetaan flow hakemalla kerran kuukaudessa kaikki ympäristön käyttäjät (Search for users (V2)).

Toiminto palauttaa kaikki käyttäjät. Olemme kiinnostuneita sisäisistä käyttäjistä (userPrincipalName päättyy omaan domainiin), joiden tunnus on aktiivinen (AccountEnabled = true). Suodatetaan (Filter array) käyttäjien joukosta nämä.

Ehdossa käytettävä kaava on seuraava.

@and(
endswith(toLower(item()?['userPrincipalName']), 'pertilamvp.onmicrosoft.com'),
equals(item()?['AccountEnabled'], true)
)

Keiden kanssa henkilö x työskentelee aktiivisesti?

Keille kaikille palautepyyntö henkilöstä x lähetetään? Viva Insights kertoo, keiden kanssa työskentelen aktiivisesti (perusten sähköposteihin, kalenteritapaamisiin, teams-kommunikaatioon jne).

Voimme hakea vastaavan tiedon kenestä tahansa Graph Api:lla (edellyttää People.Read.All -oikeuksia). Tulos ei ole yhtä tarkka, kuin haettaessa henkilöitä joiden kanssa minä itse työskentelen. Muiden henkilöiden kohdalla haku ei hyödynnä yksityisiä tietoja (sähköpostikeskusteluja, kahdenkeskisiä teams viestejä jne).

Henkilöt, joiden kanssa Timo Pertilä aktiivisesti työskentelee, saa esiin seuraavalla kutsulla.

https://graph.microsoft.com/v1.0/users/timo.pertila@pertilamvp.onmicrosoft.com/people/

Lähetämme palautepyynnön vain organisaation sisäisille käyttäjille, joten rajataan haettavat henkilöt niihin.

https://graph.microsoft.com/v1.0/users/timo.pertila@pertilamvp.onmicrosoft.com/people/?$filter=personType/class eq 'Person' and personType/subclass eq 'OrganizationUser' 

Palautetta ei lähetetä kaikille, joiden kanssa henkilö on työskennellyt. Ainoastaan neljälle lähimmälle (top=4). Tarvitsemme palautteen antajan sähköpostiosoitteen, joten rajataan kysely palauttamaan ainoastaan se.

https://graph.microsoft.com/v1.0/users/timo.pertila@pertilamvp.onmicrosoft.com/people/?$filter=personType/class eq 'Person' and personType/subclass eq 'OrganizationUser' &$top=4&$select=userPrincipalName

Voimme suorittaa tämän Graph API -kutsun Flow’ssa Office 365 Groups -toimintojen alta löytyvältä Send an HTTP request -toiminnolla.

Sillä voi tehdä Graph API -kutsuja ilman premium lisenssiä!

Kas näin saamme haettua neljä henkilön X kanssa eniten työskennellyttä käyttäjää.

Parsitaan paluuarvo vielä Parse JSON -komennolla, jotta sitä on helppo hyödyntää jatkossa.

Palautelomake – Teams chattiin lähetettävä mukautettu kortti

Seuraavaksi rakennetaan palautekortti kollegoille täytettäväksi. https://adaptivecards.io/designer/ on tähän mainio apuväline. Korttimme sisältää

  • Palautteen kohteen kuvan, nimen ja tittelin
  • Arvio osaamisesta (0-3, 0=ei osaa sanoa)
  • Arvio yhteistyön sujuvuudesta (0-3, 0=ei osaa sanoa)

Lähetetään jokaiselle henkilön kanssa aktiivisesti työskennelleelle palautepyyntö chattiin.

Viestin sisältö on tekemämme mukautettava kortti. Poimitaan viestiin palautteen kohteena olevan henkilön tiedot.

Hankalin osuus on esittää viestissä palautteen kohteen profiilikuva. Päädyin viittaamaan profiilikuvaan SharePoint-linkillä.

"url": "https://pertilamvp.sharepoint.com/_layouts/15/userphoto.aspx?size=S&username=timo.pertila@pertilamvp.onmicrosoft.com"

Palautepyyntö näyttää Teamsissa tältä.

Palautteen tallentaminen

Lopuksi käyttäjän antama palaute tallennetaan sitä varten luotuu tauluun.

Vastaukset poimitaan toiminnon paluuarvosta käsin.

Expertise: Outputs('Post_adaptive_card_and_wait_for_a_response')['body']['data']['skills']
Working with: Outputs('Post_adaptive_card_and_wait_for_a_response')['body']['data']['workingwith']

Rinnakkainen suorittaminen

Ratkaisussa on yksi merkillepantava kohta.

Flow jää odottamaan käyttäjän vastausta mukautettavaan korttiin. Tämän takia molempien Apply to each -silmukoiden asetuksista tulee laittaa rinnakkaisuus päälle (Concurrency Control).

Muutoin palautepyyntöjä lähtee eteenpäin aina yksi kerrallaan. Seuraava lähtee vasta kun edelliseen on vastattu. Mikäli palautepyyntöön ei vastata koskaan, koko prosessi pysähtyy.

Rinnakkaisuutta voi kasvattaa 50 suoritukseen asti. Tällaisenaan ratkaisu ei toimi kunnolla yli 50 hengen organisaatioilla. Isoimmilla organisaatioilla henkilöä koskevat palautepyynnöt tulee eriyttää omaan flow’hun (child flow), jolloin tästä ongelmasta päästään.

Anonymiteetti

Annettu palaute tulee olla anonyymiä. Dataverseen ei tallennu palautteen antajan tietoja (kaikki rivit tallennetaan yhdellä ja samalla tunnuksella). Mutta flow’n suoritushistoriasta palautteen antajat on helppo selvittää.

Käydään asettamassa Graph API -kutsun ja mukautettavan kortin lähettävän toiminnon asetuksista Secure Outputs päälle.

Toimintoihin imestyy lukko-symboli.

Tämän jälkeen flow’n suoritushistoriasta ei näe, keille palautepyyntö on lähetetty ja mitä he ovat mahdollisesti pyyntöihin vastanneet.

Huomioita

Esimerkissämme palautteen kohteet haetaan Office 365:n käyttäjähaku -toiminnolla. Sen tulosjoukon suodattaminen järkeväksi voi olla tuskaista. Voi olla fiksumpaa rajata palautteen kohteena olevat henkilöt jollain muulla tavoin (M365/AAD-ryhmä, Excel-tiedosto tms).

Paljonko palautteen kerääminen vie Power Platform palvelupyyntöjä?

Yhdestä henkilöstä kerättävä palaute vie max 15 toimintoa (4 vastaajaa). Kysyttäessä palautetta 50 työntekijästä päästään max 753 palvelupyyntöön. Pyynnöt saattavat hyvinkin hajaantua usealle päivälle, sillä vastaajat eivät todennäköisesti vastaa kyselyyn samana päivänä.

Kerättäessä palautetta yli 50 henkilöstä, tulee ratkaisu jakaa useampaan flow’hun. Samalla kannattaa miettiä käynnistetäänkö palautteen kerääminen eri päivinä eri joukoille (esim. yksiköittäin), jolloin muodostuneet palvelupyynnöt jakautuvat tasaisemmin.

Oleellisinta on kuitenkin miettiä mitä kyselyssä kysytään ja miten usein kysely tehdään. Maailma on täynnä säännöllisiä palautekyselyitä, joihin ensimmäisen kerran jälkeen ei jaksa vastata kukaan.