Analysis Services und das nachträgliche Erlauben von NULL-Werten in den Quelldaten – oder: Wie werd ich bloß die 0en los?

Ich hatte vor kurzem eine interessante Begegnung mit einem SSAS Cube (2008), über die ich an dieser Stelle gerne berichten möchte.

Dabei ging es um einen Cube, bei dem für ein bestimmtes Measure die Leerzeilenunterdrückung nicht so richtig funktionierte. Wenn man dieses Measure, das eigentlich eher selten gefüllt war, abfragte, dann sah das in etwa so aus:
clip_image002[1]

Wie in diesem aus der Adventure Works stammenden Beispiel (wir sehen hier den Reseller Sales Discount Amount nach Reseller Telefonnummer) wurden die leeren Zellen mit einer 0 angezeigt, was ja bekanntlich nicht leer ist und somit auch nicht unterdrückt werden kann. Bei kurzem Blick in die Quelle fand ich in etwa folgendes Bild:

clip_image004[1]

War also alles korrekt, was die Analysis Services so angezeigt haben. Der verwunderliche Teil der Geschichte beginnt aber auch erst jetzt.

Da es für Measures, bei denen mich die 0en gar nicht interessieren, nur bedingt Sinn macht, diese in der Datenbank abzulegen, habe ich also die Definition der Tabelle so geändert, dass die betroffene Spalte ab sofort NULL-Werte erlaubt. Danach wurden dann noch mit einem kleinen Statement wie unten die 0en eliminiert.

  
UPDATE dbo.FactResellerSales  

SET DiscountAmount = NULL  

WHERE DiscountAmount = 0  

Wie fast zu erwarten ist, reicht das aber noch nicht aus, denn bis die Zahlen dann wirklich im Cube landen, haben wir ja noch ein paar Abstraktionsebenen vor uns. In diesem Fall war die nächste zu überwindende Hürde die View, die der Cube für den Datenzugriff benutzt:

clip_image006[1]

Dort war die Spalte nämlich weiterhin als NOT NULL definiert (im Bild ganz unten). Also erst mal rasch die Metadaten der View aktualisiert:

  
SP_REFRESHVIEW N’dbo.v_FactResellerSales’;  

Prompt stimmt die View mit der Realität überein. Aber selbstverständlich reicht auch das noch nicht, damit die 0en aus meinem Cube verschwinden. Es gibt da ja auch noch die Data Source View in den Analysis Services, die Metadaten speichert und die ich deswegen vorsorglich aktualisierte. Das Visual Studio meldete mir aber leider nach dem Klick auf den Refresh-Knopf, dass keine Ã?nderungen gefunden wurden. Und wenn man sich dann die Eigenschaften der Spalte in der DSV anschaut:  

clip_image008[1]

Dann gibt es eine Eigenschaft AllowNull, die leider immer noch auf False stand. Und
natürlich sind die 0en nach erneuter Aufbereitung auch immer noch im Cube.

Da ich bei meiner View als Datenquelle bleiben wollte habe ich also kurzfristig „Tabelle ersetzen durch neue benannte Abfrage” gewählt und danach dann wieder die ursprüngliche View über „Tabelle ersetzen durch andere Tabelle” übernommen. Und endlich: AllowNull steht auf true. Das Ganze also schnell auf dem Server bereitgestellt, aufbereitet und NICHTS! Immer noch grinsen mich die 0en förmlich an.

Hm, ist vielleicht beim Measure selbst noch was falsch eingestellt?

clip_image010[1]

Eigentlich sieht alles gut aus. NullProcessing steht auf Automatic, was der Default ist. Ich persönlich musste das zwar bisher auch noch nie ändern, aber irgendwann ist ja immer das erste Mal:

clip_image012[1]

Nach dem Ã?ndern des NullProcessing auf Preserve verwunderte dann beim Bereitstellen, dass die automatische Aufbereitung keinen Anlass sah, die betroffene Measure Group neu mit Daten zu befüllen. Wen wundert’s dann noch, dass die 0en auch immer noch da waren.

Die nun folgende manuelle Aufbereitung war wohl die leichteste Übung, und endlich:

clip_image014[1]

Ich bin die 0en los!

  
  

  

  

Eine Antwort auf „Analysis Services und das nachträgliche Erlauben von NULL-Werten in den Quelldaten – oder: Wie werd ich bloß die 0en los?“

  1. Vielen Dank – einer der besten Analysis Services Tipps, die ich je gelesen habe. Bin schon ewig auf der Suche nach einer Lösung dieser Angelegenheit (nicht wirklich intensiv, nachdem ich der Meinung war, dass NULL in den Analysis Services immer als 0 dargestellt wird). Bin eher zufällig auf diesen Beitrag gestoàŸen (auf der Suche nach Excel-WriteBack).

Schreibe einen Kommentar