donderdag 11 juni 2009

Data type wijzigen in een DSV Named Query voor SSAS geeft Max Length Error

De situatie is als volgt:

In een DSV wordt gebruik gemaakt van een named query voor een fact tabel.
Tijdens het maken van de relaties op een column van de fact tabel en de column in een dim tabel krijg je de error: The abc Source Column and xyz Destination Column have different data types....

Nu blijk je in de named query een convert te hebben gebruikt voor de abc column:
CONVERT(VARCHAR(8), GETDATE(),112) AS 'abc'

De xyz column in de dim tabel is van data type INT.

De oplossing zou dus zijn om de convert uit te breiden en deze te casten als INT:
CAST(CONVERT(VARCHAR(8), GETDATE(),112)) AS INT) AS 'abc'

Dit resulteerd echter in de volgende error:
"Max length applies to string data type only. You cannot set column 'abc' property maxlength to be non-negative number".

De enige oplossing die ik heb kunnen hanteren om hier aan voorbij te komen is:
1 - Open de named query en copy de query tekst
2 - Delete de named query van de DSV
3 - Voeg een nieuwe named query toe aan de DSV
4 - Paste de query in de query editor en wijzig de convert...
5 - Save de nieuw Named query

Dit wordt nu door wel geaccepteerd.
Iemand een andere oplossing? Laat het dan even weten.....

zondag 7 juni 2009

Uitvullen met nullen (He dat rijmt) of te wel Leading Zeros

Er zijn meerdere mogelijkheden beschikbaar. Ik toon de voor mij zelf toch eenvoudigste mogelijkheid. Ik probeer deze methoden altijd aan te houden, ook omdat het meerdere opties biedt dan alleen nullen te gebruiken.


USE AdventureWorks
GO
SELECT
RIGHT(REPLICATE('0',10) + CAST(ContractID AS VARCHAR(10)),10) AS 'ContractID'
FROM HumanResources.Employee


Het voordeel van deze methoden vindt ik zeker dat je in de code duidelijk kan zien hoeveel posties je gaat toevoegen, zeker als een lange reeks nullen moet worden toegevoegd is het soms lastig te tellen als deze gewoon als tekst string worden aangegeven '00000000000000000000' hoeveel?

Heb jij een betere oplossing?