Call center opjagen met SQL

Status
Niet open voor verdere reacties.

snb

Verenigingslid
Lid geworden
12 jun 2008
Berichten
19.663
Natuurlijk hebben ook wij ons callcenter naar India verplaatst om zo min mogelijk last te hebben van klanten.
Ook al werken ze daar voor een schijntje, toch hebben we daar allerlei systemen geïntroduceerd om de medewerkers te bespioneren. Hopelijk kunnen we uit de analyse van die gegevens het aantal mensen dat nodig is nog verder reduceren.

Helaas worden de gegevens in afzonderlijke sets verzameld.
Willen we de duimschroeven echt aan kunnen draaien, dan zullen die gegevens geïntegreerd moeten worden per persoon en per dag.

In de bijlage tref je 6 werkbladen aan (customer satisfaction (CSAT), Net Promotor score (NPS), Fast Cusomer Response (FCR), etc..

Het is de bedoeling dat al die gegevens in 1 werkblad terechtkomen.
De gegevens die betrekking hebben op 1 medewerker (name of EIN) en op eenzelfde dag (Date) moeten gecomprimeerd worden tot 1 record.
Uiteindelijk bevat de resulterende tabel dan unieke records voor de combinatie medewerker_dag.

Omdat dit een typische Database kwestie is leek mij een SQL-benadering het meest voor de hand liggend.
Dat is mij nog niet gelukt.
Wat lukt wel ?

Het lukt mij om dit met een Dictionary-benadering te maken (Sub M_snb).
Ook werkt een ADODB.Recordset benadering (Sub M_snb_ADO).
Met een SQL-benadering (Sub M_snb_SQL) lukt het alle records uit alle bladen met eenzelfde naam en datum te integreren. Alle records zonder een naam_datum conbinatie in een van de werkbladen krijg ik daarmee echter niet boven tafel.

Kan een SQL-specialist hierover zijn/haar licht laten schijnen?

O ja, Ik ben niet naar een 'Powerpivot' of 'Powerquery' oplossing op zoek.
 
Laatst bewerkt:
@E v R

Dank !

Ik was hem al tegengekomen, weliswaar met de vermaning dat die wel erg veel tijd in beslag kon nemen bij grote aantallen.
Maar ik ga hem in ieder geval testen.
Je hoort nog van me.

Gegroet,
 
Tot nog toe is het enige resultaat het vroliijke 'Automation error' in de regel .Open c01, c00
Blijkbaar werkt 'FULL JOIN' ('FULL OUTER JOIN') niet op deze manier.
De 'LEFT OUTER JOIN' geeft wel resultaten.

Code:
Sub M_snb()
  c00 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1"""
  c01 = "SELECT `CSAT$`.*, `NPS$`.* FROM `CSAT$` FULL OUTER JOIN `NPS$` ON `CSAT$`.EIN=`NPS$`.EIN  ORDER BY `CSAT$`.EIN"

  With CreateObject("ADODB.recordset")
    .Open c01, c00
    Sheets.Add(, Sheets(Sheets.Count)).Cells(2, 1).CopyFromRecordset .DataSource
  End With
End Sub
 
Laatst bewerkt:
FullJoin zit niet in de ADO taal, dat komt uit TSQL. En die heeft een hele andere set commando’s naast de standaard opdrachten. Ik vroeg me al af hoe EVR dat ging doen :).
 
Het klop dat ADO geen Full Join ondersteunt, maar hetzelfde resultaat kan met UNION en LEFT JOINS wel gemaakt worden. Zie bijv https://stackoverflow.com/questions/47013940/how-to-use-sql-full-outer-join-query-in-vba-excel

Maar ik vraag me af of dat hier toegepast kan worden. Ik zit meer te denken aan een subquery met left joins. Het gaat dan om deze query:
Code:
Sub Rebmog()
    sConStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0 Xml;HDR=Yes;IMEX=1"""
    sSql = "SELECT tot.EIN, tot.Date, tot.Name, " & _
        "`CSAT$`.CSAT, `CSAT$`.CSAT_Score, `CSAT$`.CSAT_Surveys, " & _
        "`NPS$`.NPS, `NPS$`.NPS_Promoter, `NPS$`.NPS_Detractor, `NPS$`.NPS_Surveys, " & _
        "`FCR$`.FCR, `FCR$`.FCR_Pass, `FCR$`.FCR_Failure, `FCR$`.Eligible_Calls, " & _
        "`Talk$`.Talk, `Talk$`.Inbound_Talk_Duration, `Talk$`.Talk_Inbound, " & _
        "`Work$`.Work, `Work$`.Inbound_Work_Duration, `Work$`.Work_Inbound, " & _
        "`Hold$`.Hold, `Hold$`.Inbound_Hold_Duration, `Hold$`.Hold_Inbound " & _
        "FROM ((((((SELECT `CSAT$`.EIN, `CSAT$`.Date, `CSAT$`.Name FROM `CSAT$` UNION " & _
        "SELECT `NPS$`.EIN, `NPS$`.Date, `NPS$`.Name FROM `NPS$` UNION " & _
        "SELECT `FCR$`.EIN, `FCR$`.Date, `FCR$`.Name FROM `FCR$` UNION " & _
        "SELECT `Talk$`.EIN, `Talk$`.Date, `Talk$`.Name FROM `Talk$` UNION " & _
        "SELECT `Work$`.EIN, `Work$`.Date, `Work$`.Name FROM `Work$` UNION " & _
        "SELECT `Hold$`.EIN, `Hold$`.Date, `Hold$`.Name FROM `Hold$`) AS tot " & _
        "LEFT JOIN `CSAT$` ON `CSAT$`.EIN = tot.EIN AND `CSAT$`.Date = tot.Date) " & _
        "LEFT JOIN `NPS$` ON `NPS$`.EIN = tot.EIN AND `NPS$`.Date = tot.Date) " & _
        "LEFT JOIN `FCR$` ON `FCR$`.EIN = tot.EIN AND `FCR$`.Date = tot.Date) " & _
        "LEFT JOIN `Talk$` ON `Talk$`.EIN = tot.EIN AND `Talk$`.Date = tot.Date) " & _
        "LEFT JOIN `Work$` ON `Work$`.EIN = tot.EIN AND `Work$`.Date = tot.Date) " & _
        "LEFT JOIN `Hold$` ON `Hold$`.EIN = tot.EIN AND `Hold$`.Date = tot.Date"
    With CreateObject("ADODB.recordset")
        .Open sSql, sConStr
        Sheets(Sheets.Count).Cells(2, 1).CopyFromRecordset .DataSource
    End With
End Sub

Deze query heb ik met knippen en plakken als platte tekst in elkaar gezet. Als dit het gewenste resultaat geeft dan kun je, net zoals je dat met de andere macro's hebt gedaan, deze query tekst inclusief de kolomkoppen wel dynamisch opbouwen.
 
Welk bedrijf zit je....?:eek:
Natuurlijk hebben ook wij ons callcenter naar India verplaatst om zo min mogelijk last te hebben van klanten.
 
Dat klopt maar zoals ik niet kan voelen voor een ander is het omgekeerde ook zo....
Zonder enige toelichting komt dit vrij bot bij een potentiële klant binnen, als ik die klant zou zijn dan komt dit bij mij weinig empathisch binnen.
 
Voor mij druipt de ironie er met bakken vanaf. Ik denk niet dat snb er werkelijk zo over denkt. :D
 
Wel.... ik zie zelfs bij diverse bedrijven dat IT afdelingen zelfs hun eigen interne klanten zo benaderen en er zo over spreken, helaas bleek die zgn ironie nog de werkelijkheid ook, echt heel genant, bijna hautain gedrag... Dus ik spreek uit eigen ervaring dat het niet alleen ironisch bedoeld kan zijn.... (aangezien ik zelf vrij ervaren ben, was hun houding richting mij geen probleem en hadden ze blijkbaar niet door dat ik die opmerkingen opgepikt had... dus echt genant als je daar in de buurt staat...)
Zonder toelichting van de TS mis ik nog steeds de empathie..

Zo kun je het ook vertellen....
https://www.klantgemak.nl/site/mtel-kosten-contactcenter-verlagen
Tip 4 Zorg voor professionele medewerkers
Dit lijkt misschien een open deur, maar het is belangrijk te investeren in de juiste mensen. ....

Streef ernaar om het klantprobleem in zo min mogelijk contactmomenten te hebben opgelost. Klanten willen hun vraag niet opnieuw hoeven te stellen. Ze willen dat de gestelde vraag al bekend is, ongeacht via welk kanaal de vraag gesteld is. Maak het je klanten en medewerkers gemakkelijk. Dit levert een enorme kostenbesparing, gelukkige medewerkers én loyale klanten op.

Deze groen gekleurde tekst klinkt toch heel anders....
 
Laatst bewerkt:
@route99

'Wij' hebben helemaal geen call center, en al helemaal niet in India. @Octa bleek wel gevoelig voor de ironie, gebaseerd op eigen ervaringen als klant. Hoe harder beweerd wordt dat de klant 'centraal' staat, hoe achterdochtiger je moet zijn.
Wel eens geprobeerd bij KPN een melding over ontbrekend internet door te geven en vervolgens het door toedoen van een monteur die beweert te zijn langsgeweest, maar dat niet is, veroorzaakte ontbreken van vaste telefonie daar bovenop ?
 
Gelukkig zijn we geen copy/paste van elkaar... .zou heel erg saai zijn..

Tnx voor de toelichting.:thumb: maar ik vind de ironie wel een zoekplaatje hier... maar dat kan perceptie zijn maar hoeft dat niet te zijn.
 
@Rebmog

Dank !

Ziet er indrukwekkend uit.
Ik ben zelf nog bezig met een combinatie van left join en right join waarbij de dubbelen verwijderd worden.
Hij staat nu op mijn testlijst.
Je hoort nog van me.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan