SSRS: Wyznaczanie w grupach średniej z uwzględnieniem wartości NULL

2018-04-25

Jak SQL wyznaczy średnią z 10 NULL i 20 ?

NULL zostanie pominięte, mamy więc (10+20)/2 = 15

My jednak chcielibyśmy mieć NULL rozpatrywane jako zero: (10 + 0 + 20) / 3 = 10

Jak zaimplementować taką interpretację NULL w raporcie SSRS?

Na początku zakładam tabelę z przykładowymi danymi:

zakładam tabelę z przykładowymi danymi:

use tempdb
go
 
create table test
(
 [year] int,
 [quarter] int,
 [value] int
)
go
 
insert test values
 (2018,1,10),
 (2018,2,20),
 (2018,3,30),
 (2018,4,40),
 (2019,1,100),
 (2019,2,200),
 (2019,3,NULL),
 (2019,4,NULL)

teraz tworzę raport, który pracuje na tych danych, z grupowaniem po roku. Definicja data set:

SELECT [year],[quarter],[value] FROM test

wygląd raportu:


grupowanie: Czytaj dalej »

By Rafał Kraik in SSRS

Hyper-V: Brak połączenia z Internetem. Działało i przestało

2018-04-25

Konfigurując połączenie z Internetem  dla maszyn wirtualnych pracujących pod kontrolą Hyper-V, w pierwszej kolejności tworzy się definicję wirtualnej sieci

Tutaj została utworzona siec INTERNAL, która jest siecią typu Internal, tzn. powstaje nowa wirtualna sieć, do której wpięta zostanie maszyna wirtualna i fizyczna maszyna hostująca maszynę wirtualną. Wpięcie maszyny wirtualnej do tej sieci odbywa się w ustawieniach maszyny: Czytaj dalej »

By Rafał Kraik in Helpdesk

Import i export danych binarnych do tabel i zmiennych SQL

2018-03-31

Masz plik na dysku ze zdjęciem lub certyfikatem lub czymkolwiek innym. Plik jest binarny. Jak go wstawić do zmiennej lub do tabeli?

USE tempdb
GO

CREATE TABLE MyBinary(Blob VARBINARY(MAX))
GO

DECLARE @Data VARBINARY(MAX)
 SET @Data = (SELECT BulkColumn FROM Openrowset( Bulk 'C:\temp\MyCertificate.cer', Single_Blob) as img)
INSERT MyBinary VALUES(@Data)
GO

W moim przypadku chciałem korzystać z tak zaimportowanego certyfikatu w skrypcie, żeby uruchamiając skrypt na danym systemie nie trzeba było kopiować żadnych dodatkowych plików na czas instalacji. Innymi słowy chciałem mieć zmienną binarną zadeklarowaną w skrypcie. Moja „sztuczka” polegała na wyeksportowaniu danych tabeli MyBinatry i odpowiedniej modyfikacji skryptu. W tym celu:

  • Kliknij prawą myszką na bazie danych i wybierze Tasks >> Generate Scripts
  • W kreatorze zaznacz tylko tabelę MyBinary
  • W następnym oknie kreatora kliknij Advanced i zmień „Schema only” na „Data only”
  • W wygenerowanym skrypcie znajdzie się dłuuuuga wartość, która jest reprezentacją kolumny binarnej
Teraz udało mi się więc napisać fragment skryptu w  postaci (część binarna jest dla skrócenia wycięta):

DECLARE @DataCert VARBINARY(MAX)
SET @DataCert = (0x308...129)

No dobrze. A jak teraz tego rodzaju zmienną zapisać w postaci pliku binaranego z powrotem na dysku? Skorzystamy z funkcji OLE, które zazwyczaj ze względu na wymogi bezpieczeństwa są wyłaczone, dlatego skrypt najpierw sprawdzi czy opcja 'Ole Automation Procedures’ jest wyłączona, zapamięta to, włączy jeśli trzeba, a na końcu przywróci oryginalne ustawienia. Środkowa część skryptu to kilka kolejnych kroków, które należy wykonać aby dane zapisać na dysku:

DECLARE @DataCert VARBINARY(MAX)
SET @DataCert = (0x308...129)

DECLARE @certPath varchar(50) = 'C:\temp\MyCertificate.cer'
DECLARE @handle int

EXEC sp_OACreate 'ADODB.Stream', @handle OUTPUT; 
EXEC sp_OASetProperty @handle, 'Type', 1; 
EXEC sp_OAMethod @handle, 'Open'; 
EXEC sp_OAMethod @handle, 'Write', NULL, @DataCert; 
EXEC sp_OAMethod @handle, 'SaveToFile', NULL, @certPath, 2; 
EXEC sp_OAMethod @handle, 'Close'; 
EXEC sp_OADestroy @handle; 

IF @initialOLEAutomationOption = 0 
BEGIN
 EXEC sp_configure 'Ole Automation Procedures', 0
 RECONFIGURE WITH OVERRIDE
END

 

By Rafał Kraik in SQL

Powershell: Jak sprawdzić kiedy w clustrze wystąpił failover

2018-03-26

Jedna prosta komenda:

Get-winEvent -ComputerName $env:COMPUTERNAME -filterHashTable @{logname =’Microsoft-Windows-FailoverClustering/Operational’; id=1641}| ft -AutoSize -Wrap

Właściwie każdy wie, że takie zdarzenia trafiają do loga. Spryt  polcecenia polega na wyfiltrowaniu tylko tych zdarzeń, które rzeczywiście są potrzebne.

By Rafał Kraik in Power Shell

SQL: Extended Events vs Profiler

2018-03-25

Microsoft już dawno temu poinformował o tym, że Profiler nie będzie dalej rozwijany i zaprosił do korzystania z extended events. Rzeczywiście extendend events mają o wiele wiecej możliwości monitorowania aktywności systemu i dodatkowo robią to znacznie wydajniej. Gdyby ktoś jednak nadal nie był przekonany co do stosowania extended events, to może ten wykres go przekona… ?

Wykres prezentuje ilość zdarzeń, które mogą być monitorowane przy pomocy extended events i przy pomocy profilera. Podczas gdy  ilość extended events od wersji 2008 powiększyła się 4-krotnie, ilość zdarzeń dla profilera stoi na poziomie 180!

By Rafał Kraik in SQL 2016

Powershell: Get-History

2018-03-25

Kiedy pracujesz z PowerShell, konsola śledzi i zapamiętuje każdy twój ruch. Dzięki temu można przejrzeć listę wykonywanych do tej pory poleceń naciskając strzałkę w górę. Do przejrzenia wcześniej wykonanych poleceń można sie także posłużyć poleceniem

Get-History

Posiadając listę do tej pory wykonanych poleceń, możesz chcieć ponownie uruchomić jedną z nich. Da się to zrobić powołując się na numer komendy w historii uruchamiając

Invoke-History

Tak to działa w praktyce:

Jeśli chcesz tylko pobrać listę komend i umieścić ją w schowku wykonaj:

Get-History | Select -expand CommandLine | clip

 

 

By Rafał Kraik in Power Shell

SQL: Filestream – dlaczego trzeba go włączyć dwa razy?

2018-03-12

Podczas konfiguracji FILESTREAM dwa razy wykonuje się podobne czynności:

  • W SQL Configuration Manger, należy we właściwościach usługi SQL na karcie FILESTREAM wybrać jedną z dostępnych opcji:
  • A następnie w SQL Management Studio wykonać polecenie SP_CONFIGURE zmieniając 'filestream access level’
    EXEC sp_configure 'filestream access level',2
    GO
    RECONFIGURE
    GO

Czy te dwa kroki się powielają? Czy można wykonać jeden a drugiego już nie?

Otóż nie!

Pierwsza część wykonuje fragment konfiguracji systemu operacyjnego, którego nie można wykonać z wewnątrz procesu SQL

Druga część odpowiada za włączenie opcji na poziomie silnika bazy danych

Pierwsza część wymaga uprawnień lokalnego administratora, a druga sysadmina.

To cały powód!

FILESTREAM Configuration and Setup Changes in SQL Server 2008 February CTP

By Rafał Kraik in SQL