2017-03-13 3 views
0

Ich habe ein tabellarisches Modell, das meist ein Sternschema ist, mit Ausnahme von Datum, das keine Beziehung zur Faktentabelle hat.Optimierung von Dax distinct Aggregat

Der Grund dafür ist, dass alle ausgeführten Berichte Snapshot-Berichte sind, d. H. Wo selectedDate zwischen StartDate & EndDate, d.h. es gibt keine direkte Beziehung.

Dies ist in Ordnung, wenn eine eindeutige Anzahl aller IDs berechnet wird. Wenn jedoch ein Benutzer eine Spalte in die Zeilen einer Pivot-Tabelle zieht, bleibt Excel für einige Zeit stehen, bevor "Speicherfehler: Zuweisung Fehler: Die Auslagerungsdatei ist zu klein .... ".

Um zu optimieren, habe ich eine Reihe von berechneten Spalten in meiner Faktentabelle erstellt, eine für jeden Filter in der Kennzahl, so dass die Berechnung Beziehungen & Dimensionen nicht abfragen muss. Ich kann dies für alle außer der Datumsspalte tun.

Die Datenbank ist nicht groß, etwa 700mb, und die aggregierte distinct count ist knapp 4000 Zeilen, so dass die Ergebnismenge ist auch nicht groß, aber ich bekomme immer noch die Ausnahme wegen zu wenig Speicher.

Die Berechnung ist unten. Ich kann nicht den vollständigen Datensatz teilen leider:

CALCULATE (
countrows (values('StudentResults' [StuIDNumber]) ), 
FILTER (
'StudentResults', 
( 
'StudentResults'[CourseInstanceStartDate] <= MIN ('Date'[DateID]) 
&& 'StudentResults'[CourseInstanceEndDate] >= MIN ('Date'[DateID]) 
) 
&& 'StudentResults'[CourseInstanceStatusCode] = "OPEN" 
&& 'StudentResults'[StudentStartDateID] <> 19500101 
&& 'StudentResults'[studentStatusCode] = "R" 
&& 'StudentResults'[Session] >= 2014 
) 
) 

Id appreaciate irgendwelche Ideen, wie diese Arbeit zu bekommen? (Beachten Sie es mit COUNTA arbeitet() oder Graf, aber DistinctCount oder CountRows (Werte()) verursacht dieses Problem.

Antwort

0

Ich habe ähnliche Probleme konfrontiert mit COUNTROWS über virtuelle Tabellen, endete durch SUMX mit.

CALCULATE (
    SUMX (DISTINCT (StudentResults[StuIDNumber]), 1), 
    FILTER (
     StudentResults, 
     (
      [CourseInstanceStartDate] <= MIN ('Date'[DateID]) 
       && [CourseInstanceEndDate] >= MIN ('Date'[DateID]) 
     ) 
      && [CourseInstanceStatusCode] = "OPEN" 
      && [StudentStartDateID] <> 19500101 
      && [studentStatusCode] = "R" 
      && [Session] >= 2016 
    ) 
) 

ich ein paar Frage gesehen haben, bevor Sie diese Frage in Bezug auf und OPs ausgedrückt es um die Leistung zu verbessern hoffen, dass es für Sie arbeitet [1]

+0

ich versucht, und ich habe das gleiche. „Speicherfehler: Zuordnungsfehler“ Fehler , obwohl es möglicherweise leistungsfähiger ist als distinctCount, nicht genug für diese spezielle Situation Ich habe es geschafft, das DistinctCount zu arbeiten, indem ich die STUIDNumber von einer Zeichenfolge in eine ganze Zahl umwandelte. Die Platzanforderungen schienen viel geringer zu sein, die Abfrage dauerte jedoch immer noch etwa 2 Minuten, was nicht akzeptabel ist. Ich ging zurück zu dem alten Weg, mit Summarize. Es ist komplizierter als zu berechnen und ich war besorgt, dass ich nicht alle Ergebnisse in Betracht ziehen würde, aber ich habe ziemlich viel getestet und es scheint in Ordnung zu sein. –