Berechnetes Maß, um nur den aktuellsten Wert aus einer Dimension für die Momentaufnahme zu erhalten, aber andere Filter beizubehalten


7

Ich arbeite an einem Tabellenwürfel in SSAS 2012 SP1 CU4. Ich habe 3 Dimensionen (Anforderung, Anforderungsstatus, Datum) und 1 Fakt (Anforderungszählungen). Meine Faktentabelle entspricht den Anforderungen von RequisitionKEY, RequisitionStatusKEY und SnapshotDateKey.

Ich habe Kennzahlen berechnet, die im Wesentlichen den letzten nicht leeren Wert (wie eine halbadditive Kennzahl) für den angegebenen Zeitraum erhalten, unabhängig davon, ob es sich um Jahr, Monat oder Datum handelt:

Openings:=CALCULATE(Sum('Requisition Counts'[NumberOfOpeningsQT]), 
Filter('Date','Date'[DateKey] = Max('Requisition Counts'[SnapshotDateKEY])))  

Dies funktioniert gut, bis Sie den Anforderungsstatus in den Mix einfügen. Ich habe Zeilen für jede Anforderung für jeden Tag im Jahr 2013. Für eine der Anforderungen war der Anforderungsstatus für die ersten 6 Monate ausstehend und wurde dann für alle Daten vom 1. Juli bis heute in Genehmigt geändert. Wenn ich die Anzahl der Öffnungen für die Anforderung auf Monatsebene für Juli zusammenfasse, sehen Benutzer zwei Zeilen: die Summe der Öffnungen für den letzten ausstehenden Tag im Juli, an dem sie ausstanden, und die Summe der Öffnungen für den letzten besetzten Tag in Juli, dass es genehmigt wurde.
Pivot-Tabelle

Obwohl die Summe von 2 korrekt ist, muss ich diese Berechnung so ändern, dass ich nur den aktuellsten Anforderungsstatus für den ausgewählten Datumszeitraum (Genehmigt) erhalte und entweder 0 oder null oder leer für die ausstehende Genehmigungszeile in der Pivot-Tabelle anzeige.

Die Anforderungsstatus-Tabelle sieht folgendermaßen aus: Anforderungsstatus

Update: Hier ist ein Link zu einem von mir erstellten PowerPivot-Modell , das einige bereinigte Daten enthält, um diese Frage zu beantworten. Dies sollte die Tabellenschemata besser erklären. Das Feld NumberOfOpeningsQT gibt im Grunde die Anzahl der offenen Stellen an, die sie für diesen Job haben. Manchmal ist es 1, manchmal ist es mehr als 1. Es ändert sich normalerweise nicht im Laufe der Zeit, aber ich denke, es könnte. Ich versuche, die Öffnungsberechnung so zu gestalten, dass ich die gewünschte Antwort bekomme. Ich warf einige andere Berechnungen hinein, um einige Dinge zu zeigen, die ich versucht hatte und die vielversprechend waren, die ich aber nicht zur Arbeit bringen konnte.


2013-10943 hat einen Eintrag für 20130601, nichts für den Rest des Juni, dann zwei identische Einträge für 20130701/02. Es scheint also kein täglicher Schnappschuss zu sein. Sind die Daten oder die Beschreibung falsch? Wenn die Daten korrekt sind und ein Schnappschuss nur zeitweise aufgezeichnet wird, was würden Sie erwarten, wenn das Filterdatum 20130602 wäre?
Mark Storey-Smith

Ja ... sie haben angefangen, die Daten monatlich zu sammeln, also hatten sie nur am ersten eines jeden Monats Daten, bis sie im Juli auf täglich umstellten. Wenn Sie nach 6/2 filtern (für die es keine Daten gibt), würde ich erwarten, keine Daten zu erhalten.
mmarie

Antworten:


6

Sie können die folgende Berechnung versuchen:

Openings:=
CALCULATE( SUM( 'Requisition Counts'[NumberofOpeningsQT] )
         , CALCULATETABLE( LASTNONBLANK( 'Requisition Counts'[SnapshotDateKEY] , 1 )
                         , ALL( 'Requisition Status' )
                         )
         )

Der wichtige Teil ist das Einstellen des richtigen Filterkontexts für das Äußere CALCULATE.

Mit CALCULATETABLEdefinieren wir die spezifischen Zeilen, die das Äußere CALCULATEberücksichtigen soll: das letzte nicht leere Snapshot-Datum für alle Anforderungen (oder für eine bestimmte Anforderung unter Berücksichtigung des Kontexts jeder Anforderung in einer Pivot-Tabelle), unabhängig von den Filtern in der Anforderungsstatus, der mit der ALLFunktion erreicht wird.

Die Maßnahme funktioniert nicht genau so, wie Sie es möchten. Sie sagen, Sie würden erwarten, dass die Gesamtsumme für Genehmigt 2 2013-11059beträgt . Am Beispiel der Anforderung aus dem Power Pivot-Modell wird nur berücksichtigt, da es 2013-07-01 1 Genehmigten Status und 2013-07-02 einen weiteren Status gibt der letzte Status für die Summe, was zu 1 führt.


Vielen Dank! Das hat perfekt funktioniert. Ich habe anscheinend nicht richtig gedacht, als ich sagte, ich wollte, dass meine endgültige Antwort 2 ist. Es hätte 1 sein sollen. Das ist, was ich brauchte.
mmarie

Eine Sache, die mir aufgefallen ist, war, dass ich die Semikolons in der Berechnung durch Kommas ersetzen musste. Nur zur späteren Bezugnahme für andere. Nochmals
vielen

Ich bin froh, dass es für dich funktioniert, @mmarie. Ich habe Semikolons als Parametertrennzeichen verwendet, da dies das in meinem Gebietsschema verwendete Zeichen ist. Ich werde es in Kommas ändern, da dies auch das in Books Online verwendete Zeichen zu sein scheint.
Gonsalu

0

Ich habe dies noch nicht modelliert, aber eines, das mir in den Sinn kommt, ist das Hinzufügen eines weiteren FILTER () zu Ihrem CALCULATE () - Bereich wie folgt: FILTER ('Anforderungsstatus', 'Anforderungsstatus' [Schlüssel] = MAX (' FactRequisition '[RequisitionKey])). Mein Gedanke ist, dass durch Hinzufügen dieser Option die Anforderungstabelle so gefiltert wird, dass sie nur die neueste Anforderung enthält. Ich gehe davon aus, dass eine Anforderung nicht von Genehmigt auf Ausstehende Genehmigung umgeschaltet werden kann, was einen Knick in diese ...


Danke für die Antwort, Josh. Diese Lösung hat immer noch das gleiche Problem wie meine vorherige Lösung, da für die Anforderung, die Mitte des Jahres den Status gewechselt hat, immer noch zwei Zeilen (eine für jeden Status) mit derselben Nummer für die Kennzahl angezeigt werden. Ich glaube, das liegt daran, dass der Status Teil des Filterkontexts ist, der aus der Pivot-Tabelle stammt. Der Statusschlüssel für die Mindestanforderung fasst also nur einen Wert zusammen und entspricht daher dem Filterkontext.
mmarie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.