25.04.2008

Excel' de tekrarlayan kayitlari bulmak,

T-SQL kullanarak bir tabloda ki kayitlari bulmak icin bir cok yontem var, bunlardan bir tanesini de buraya yollamistim. Ama zaman zaman bu tekrarlayan kayitlari henuz SQL ortamina gelmeden bulmamiz gerekir. IT birimlerinde calisan herkesten muhakkak bir kullanicisi bir Excel listesi ile gelip tekrarlayan kayitlari bulmak icin yardim istemistir. Benim de basima siklikla gelen bu durum icin asagidaki Excel formulunu yazmistim.

A sutununda bulundan anahtar'a gore tekrarlayan kayitlari, B sutununa yerlestirtigimiz su formulle bulup gerekirse silebiliriz.

=IF(COUNTIF(A:A,A2)=1,A2,IF(COUNTIF(A$1:A2,A2)=1,A2,"zzzBenBirTekrarKayitim"))

kolay gelsin.

13.03.2008

DENSE_RANK ile Gruba duyarli siralama

Karsilastigim sorun soyleydi.

Elimde Ulke, Kullanici Adi, Tarih seklinde erisim istatistikleri var, ve bunlari bir duzene sokmam ve bir grafikte gostermem gerekiyor. Ornegin Subat ayinda kac rapor goruntulenmis, hangi ulkeden goruntulenmis, hangi kullanici tarafindan goruntulenmis.

Basit bur group by ile count aliyoruz ve grafigimiz hazir ama soyle bir problem var. Cok fazla kullanici var hepsini grafikte gostermek mumkun degil o zaman aktif kullanicilari grafikte gosteryeim daha az aktif olanlari ise toplayim DIGERLERI seklinde gostereyim.

Bunun icin kullanicilari ulkelerine ve ay'a gore gruplamam ve erisim sayilarina gore siralamam gerekiyor. Iste burada Dense_Rank, grup bazinda siralam yapmamiza yardim ediyor.

BOL 'a bakalim.
DENSE_RANK ( ) OVER ( [ <> ] < order_by_clause > )

Evet burada
[ <> ] Group by'a ekledigimiz kolonlari,
< order_by_clause > Siralamayi yapmak icin.

Soyleki, aktif 20 kisi gozuksun digerleri bir ararda gozuksun


Select
xAy,
xUlke,
CASE
WHEN (DENSE_RANK() OVER (PARTITION BY xAy, xUlke order by COUNT(*) desc) ) <=20 THEN xKullanici ELSE xUlke +'-DIGERLERI' xKullanici, COUNT(*) ErisimSayisi

FROM
ErisimBilgisi
GROUP BY
xAy,

xUlke,
xKullanici


Kolay Gelsin,

15.01.2008

Excel Pivot Table'da Veri Kaynagini Degistirmek

Varsayalim, bir zaman harici bir veri kaynagindan beslenen bir Excel Pivot Table olusturdunuz. Bir zaman sonra bu veri kaynaginin IPsini , ismini degistirmek zorunda kaldiniz. Ve beklemediginiz bir sey oldu, meger sizin unuttudugunuz, Pivot Table mailden maile dolasarak sagina soluna grafikler eklenerek bircok insan icin operasyonel bir arac haline gelmis ve IP degisikligi ile bir cok insan bu araci kullanamamaya baslamis.

Surpriz ve basagrisi.

Asagidaki scripti kullanicilara dagitip Pivot Table'lardaki data source alanini degistirmek icin yazdim. Not: Calismasi icin Macro Guvenlik Seviyesinde VBScriptlere izin verilmesi lazim.

Kolay Gelsin

'Replace DataSource Name of an Excel Pivot Table
'By Erdal Akbulut
'on 15.01.08


' Get File
Set ObjCDO = CreateObject("UserAccounts.CommonDialog")
InitFSO = ObjCDO.ShowOpen
If InitFSO = False Then
Wscript.Echo "Script Error: Please select a file!"
Wscript.Quit
Else
fName = ObjCDO.FileName
End If
'Clean up
Set ObjCDO = Nothing
Set InitFSO = Nothing

'Open It in Excel
Set objExcel = CreateObject("EXCEL.APPLICATION")
Set objWorkBook = objExcel.Workbooks.Open(fName)

'Save as XML
fXmlName = fName & ".xml"
objWorkBook.SaveAs fXmlName ,46
objWorkBook.Close True

'Clean up
Set objWorkBook = Nothing
Set objExcel = Nothing

'Open XML as Text File for Input
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile (fXmlName, 1, True)

'Get File Content and Replace Server Name
sFileContents = objTextFile.ReadAll
sFileContents = Replace (sFileContents, "OLDSERVERNAME" , "NEWSERVERNAME")

'Clean up
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing

'Open XML as Text File for Output
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile (fXmlName, 2, True)

'Output XML File with New ServerName
objTextFile.Write(sFileContents)

'Clean up
objTextFile.Close
Set objTextFile = Nothing
Set objFSO = Nothing

'Open XML in Excel
Set objExcel = CreateObject("EXCEL.APPLICATION")
Set objWorkBook = objExcel.Workbooks.Open(fXmlName)

'Save as XLS with New Name
fNewName = fName & "_New.xls"
objWorkBook.SaveAs fNewName
objWorkBook.Close True

'Clean up
Set objWorkBook = Nothing
Set objExcel = Nothing

'Delete XML file
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.GetFile (fXmlName)
objTextFile.Delete

'Clean up
Set objTextFile = Nothing
Set objFSO = Nothing