MDX Query using other hierarchy in same dimension as in slicer

The other day a coworker of mine presented me with a problem in one of our solutions. His basic pain was, that the front-end of the application only allowed for one dropdown containing whatever dimension was set up to be displayed. This dimension is to act as slicer in a scorecard application. Since his KPIs were aiming different levels of different hierarchies in the date dimension, he was experiencing problems when faced with the choice of only one available date hierarchy.

Luckily we are able to solve this issue by means of MDX.
The following statement should display the solution, by the use of the method EXISTS and the knowledge of the structure of the date dimension hierarchies.

WITH
	MEMBER [Measures].[Test] AS 
		( EXISTS([Date].[Calendar Week].Members, [Date].[Calendar].CurrentMember).Item(1), [Measures].[Internet Sales Amount])
SELECT
	{[Test]} ON COLUMNS
FROM [Adventure Works]
WHERE { [Date].[Calendar].[Date].&[20070201] }

We use the EXISTS function to find the members of the [Date].[Calendar Week] hierarchy with the slicer set to  a member of another hierarchy, in this case [Date].[Calendar].[Date].&[20070201]. Note that we need to get Item(1) of the collection returned, as we get the All member at first index (0).

UPDATE:

As mentioned by Hrvoje Piasevoli (blog|twitter) it is a more clean solution to just query by the tuple made by the week hierarchy and the measure, eg.:

([Date].[Calendar Week].CurrrenMember, [Measures].[Internet Sales Amount])

In our case however, we discovered that the attribute relations in the Date dimension was not setup correctly to allow us to “convert” a member in one hierarchy to another. We ended up with the [All] member of that hierarchy.
We solved the issue by making a common root for the two date hierarchies, as seen in the Adventure Works cube.

Reklamer

Lærte noget nyt om arv i dag…

Da jeg sad og skulle implementere et design, kom der en ide op omkring en variabel der skulle udbydes af en abstrakt klasse, for derefter at blive assignet i den nedarvende klasse.
Under selve implementeringen finder jeg på at gøre variablen readonly, men finder ud a at det ikke kan lade sig gøre.
Jeg troede, at så længe jeg assignede variablen i en konstruktør, var der ingen is på koen. Men der skulle jeg så lære noget nyt 🙂

Eksemplificeret ved følgende blok:

     public class Foo
     {
         protected readonly string setInSubClass;
         private readonly string setInBase;
         protected Foo()
         {
             setInBase = "base" ;
         }
     }
     public class Bar : Foo
     {
         public Bar() : base ()
         {
             setInSubClass = "subclass" ;
         }
     }
 }

Men visual studio skulle vise sig at kende til en begrænsning jeg ikke kendte (det er ikke første gang). Se screensnip:

Og tilhørende build fejl:

Slotskage i lyserød

Der begynder så småt at blive stillet større og større krav til udformning af kager til bestemte begivenheder i den lille familie.
Senest fylder den ældste 4 år på onsdag, hvorfor der den seneste tid er blevet eksperimenteret med tiltag i den retning.
Herunder ses forsøget på et prinsesseslot i skøn forening af smør, sukker, sukker, mel, smør, æg, mel, sukker, smør, æg og appelsin også bedre kendt som mazarinkage med glasur og vafler.

Den endelige kage, med hele baduljen kørt på 🙂

Setting the maximum allowed memory consumption by Analysis Services

Here follows the step to find where to change the settings for LowMemoryLimit, TotalMemoryLimit and other memory related properties of the SQL Server Analysis Services instance.

Fire up your SQL Server Management Studio, and right-click the server and select ‘properties’

Then check the ‘Show Advanced (All) Properties’ and you’ll see al available properties, like this example:

If values listed are between 0 and 100, they are treated as a percentage of the physical memory on the server. Otherwise they are treated as bytes.

A rather unfortunate bug… But aren’t they all?

The other day I was testing various charting components, including XCeed, Nevron and DevExpress. All components really looked nice in regards to API, Layout and Look N Feel.
I have run several tests on all three components, and have a hard time deciding which one to choose for our project (if any of the three).

Today I hit a strange behaviour with the DevExpress trial installation. While I was adding a class in VS2010, by right clicking and choosing ‘add class’ I got a lot more than just a class.
In fact the DevExpress trial package deemed it necessary to add a reference to every DevExpress library in the current project, see image:

DevExpress Issue 1

The fact that the project is a businesslayer makes matters worse…
I think DevExpress has some fixing to do 🙂

UPDATE:
This seems to have been caused by what I call a “Monday Computer”.
I havent been able to reproduce the bug, except for the day it occurred.
DevExpress has been very willing to help and very alert, through especially Mehul Harry and Seth Juarez

LEGO-world

Et lille uddrag af seværdighederne ved dette års LEGO-World

Hvorfor det tager, en gør-det-selv-mand, mindst en uge at skifte blandingsbatteri

For næsten enhver gør-det-nogenlunde-selv-mand kommer øjeblikket, hvor blandingsbatteriet har holdt sin sidste dråbe tilbage, og skal skiftes. Man skulle som udgangspunkt tro, at det ville være en forholdsvis overkommelig opgave. Ud af de mulige kombinationer ville intet udfald være katastrofalt, men der kunne selvfølgelig være blevet byttet om på koldt og varmt vand.

Alt dette var vel overvejet da jeg tog i Bauhaus for at købe nyt blandingsbatteri. Ved det afsluttende spørgsmål “har jeg så alt jeg skal bruge?” svarede eksperten “jeps, den skulle være i vinkel”. Lad mig bare afsløre allerede nu, at det var det langt fra.

Da jeg først forsøgte at montere rørene, uden at montere selve batteriet opdagede jeg at det medfølgende gevind ikke passede på forlængerrøret. Hmpf! Så jeg måtte gen-montere det gamle blandingsbatteri.

Status dag 1: ingen ændring

Tilbage til Bauhaus hvor en medarbejder skråsikkert meddelte at “det kan kun være dem der der passer” så jeg trillede godmodigt hjem, for endelig at få monteret det nye blandingsbatteri. Og rigtig nok, så passede de ny dimser, fantastisk! Men det var jo kun et delmål. Blandingsbatteriet viste sig at være til montering i køkken, hvorfor stykket under bordpladen, fyldte mere end der var plads til, under badeværelsesvasken. I forbindelse med denne opdagelse, der jo indebar demontering af det eksisterende blandingsbatteri, blev en af de slanger der forbandt rør med blandingsbatteri utætte pga. ødelagt pakning.

Status dag 2: stadig det gamle blandingsbatteri monteret, nu bare kun med varmt vand som i øvrigt var den der dryppede.

Tredie dag måtte jeg desværre afse 3,5 time til en fantastisk vigtigt ekstra-ekstraordinær generalforsamling, hvorfor der ikke var noget fremgang i projektet.

Status dag 3: same same

Det første blandingsbatteri var valgt dels med design, og dels med længerevarende brug for øje. Nu skulle vi så til at vælge igen, og prioriterede nu pris og funktion højest. Vi skulle nu bare have et blandingsbatteri der kunne udføre opgaven i en kortere periode. Et eller andet sted ude i horisonten ligger der et nyt badeværelse og venter, men om det er mens vi bor her vides ikke. Hvorom alting er, så var Silvan leveringsdygtige i et blandingsbatteri der netop opfyldte pris + funktion, men de var så heller ikke leveringsdygtige i særligt meget mere. Det blev for meget for den kære servicemedarbejder da jeg forklarede hvordan det skulle monteres. Da det oprindelige rør fra balofixen var forlænget med en slange, var det for uoverskueligt for medarbejderen. “Jeg skal bruge en kobling med udvendigt gevind” forklarede jeg, hvorefter Silvan-gutten noget fortørnet proklamerede at “det er da et mærkeligt system du har. Det har jeg aldrig været ude for før”. Uden at virke alt for opgivende og overbærende prøvede jeg at pege på en af de mange varianter der hang på væggen, og det lykkedes da også langt om længe at få pæren til lyse. Nu havde jeg fornemmelsen af at være tættere målet end før. Og Silvan-medarbejderen virkede også som om han havde sagt de rigtige ting. Puttetjans og andre huslige forpligtelser satte dog en stopper for mere fremgang i projektet den dag.

Status dag 4: same same, nu bare med de rette fittings, og det rette blandingsbatteri.

Fredag skulle jeg så have ungerne alene om aftenen, men jeg ville lige forsøge at montere skidtet mens de var i badekar. Det hele gik fint, lige indtil den kolde tilslutning skulle monteres. Røret på det nye blandingsbatteri var af uransagelige årsager fem centimeter kortere end på det oprindelige. Så der manglede md andre ord noget rør. }#%{%}^^#^{%|$||%{

Det gamle blandingsbatteri havde jeg ikke behandlet videre kønt, så det kunne jeg ikke montere igen. Jeg måtte altså montere den varme tilslutning til det nye blandingsbatteri der nu sad i vasken. Den kolde kunne ikke nå, så den monterede jeg på det kasserede blandingsbatteri og lagde det under vasken. Man skulle bare ikke lukke op for den kole hane, så pøsede det ud på gulvet.

Status dag 5: nyt blandingsbatteri, men kun med varmt vand.

Lørdag formiddag tog jeg så afsted til Silvan for at købe et længere rør til tilslutning af den kol hane. Med Rosa i ladcyklen gik det hurtigt derudaf. Der var jo god medvind og derfor høj fart. Det blev skæbnesvangert i et s-sving ved café Ae. Her løftede det en hjul sig pludseligt og jeg mistede herredømmet over cyklen. Jeg prøvede at tage fra med mit ben, hvilket måske var dumt, men måske årsag til at der slet ikke skete noget med Rosa. Heldigvis skete der ikke noget med hende, hun kiggede lidt mut på mig da jeg vippede cyklen tilbage på alle tre. Men vandt hurtigt humør igen. Nu var vi jo kommet helt derind, så vi skyndte os i Silvan, købte slangen og humpede så ellers hjemad i langsomt tempo.

Skadestuen meldte hus forbi, og kunne ikke sige noget pga. hævelsen i knæet. Nu var mobiliteten ramt kraftigt, så det at ligge med skiftenøgler og andet værktøj under en håndvask stod ikke lige øverst på to-do listen.

Status dag 6: alle indkøb foretaget, nu venter vi bare på mobilitet. Så tæt på målet nu 🙂

Søndag kunne jeg så halvt siddende, halvt liggende montere slangen så vi kunne få koldt vand. Bingo! Det virker! Og man ser slet ikke at det pipler lidt fra den ene samling, når man ligger med benet oppe her inde i sofaen.

Status dag 7: alles klar herr kommisar, well næsten da…