2009-11-20 22 views
5

dice che ho un provvedimento, foo, in un cubo, e ho un obbligo di segnalazione che gli utenti vogliono vedere le seguenti misure in un rapporto:Filtraggio una Misura (o rimozione di valori anomali)

total foo 
total foo excluding instances where foo > 10 
total foo excluding instances where foo > 30 

Che cosa è il modo migliore per gestire questo? In passato, ho aggiunto i calcoli denominati che restituiscono NULL se foo > 10 o solo foo in caso contrario. Mi sento come se ci deve essere un modo per ottenere questo a MDX (qualcosa come Filter([Measures].[foo], [Measures].[foo] > 10)), ma non posso per la vita di me capire qualcosa.

Tutte le idee?

risposta

3

Il trucco è che si È necessario applicare il filtro sul proprio set, non sul proprio misuratore

Ad esempio, utilizzando il consueto cubo di dimostrazione Microsoft 'warehouse and sales', il seguente MDX visualizzerà le vendite per tutti i negozi in cui le vendite erano superiori a $ 2000

 
SELECT Filter([Store].[Stores].[Store].members, [Unit Sales] > 2000) ON COLUMNS, 
[Unit Sales] ON ROWS 
FROM [Warehouse and Sales] 
+1

apprezzo il vostro input, che non è affatto la posta desiderata sto andando per. Il tuo esempio filtra una serie di negozi, ma quello che sto cercando è un modo per filtrare i record dei fatti. Utilizzando il tuo esempio, dire che volevo mostrare le Vendite unitarie medie per negozio, voglio comunque mostrare tutti gli Store, ma non voglio che la media aggreghi Vendite unità> 2000. – Colin

2

penso che si hanno due scelte:

1- Aggiungi colonna al fatto (o vista sulla vista origine dati che si basa sulla tabella dei fatti) come:

case when unit_Price>2000 then 1 
    else 0 
end as Unit_Price_Uper_Or_Under_10 

e aggiungono una dimensione fittizia basata su questo valore delle colonne. e aggiungere il nome di query per New Dimension (dire Range_Dimension in DataSourceView: selezionare 1 come gamma unione tutto selezionare 0 come gamma

e dopo taht non puoi usato questo filtro come altra dimensione e attributo

SELECT [Store].[Stores].[Store].members ON COLUMNS, 
[Unit Sales] ON ROWS 
FROM [Warehouse and Sales] 
WHERE [Test_Dimension].[Range].&[1] 
.

il problema è per ogni fascia è necessario aggiungere When condizioni e solo se il campo è statico questa soluzione è una buona soluzione. e per una gamma dinamica è meglio formulare la gamma (basata sul metodo disceretizing)

2- aggiungere dimensione con granularità vicino alla tabella fatto basato sulla tabella fatto per esempio se abbiamo fatto tabella con chiave primaria Sale_id .we può aggiungere dimensione basata sulla tabella fatto con una sola colonna sale_Id in dimension Usage tab possiamo correlare questo new dimension e measure group in relazione il tipo Fact e dopo che nel mdx possiamo usare qualcosa di simile:

filter([dim Sale].[Sale Id].[Sale Id].members,[Measures].[Unit Price]>2000) 
0

ho incontrato problema simile quando uso Saiku (back-end con Mondrian), in quanto non ho trovato alcuna soluzione limpida di " aggiungi filtro su misura ", l'ho aggiunto qui, e potrebbe essere utile per un altro ragazzo.

In Saiku3.8, è possibile aggiungere un filtro all'interfaccia utente: "column" -> "filter" -> "custom", quindi è possibile visualizzare un filtro MDX Expression.

Supponiamo che vogliamo click nella annuncio maggiore di 1000, quindi aggiungere la seguente riga c'è:

[Measures].[clicks] > 1000 

Salva e chiudi, poi quel filtro saranno validi per trovare elem con gli scatti superiori a 1000.

il MDX piace qui sotto (supponiamo dt come dimensione e scatti come misura, vogliamo trovare dt con gli scatti più di 1000)

WITH 
SET [~ROWS] AS 
    Filter({[Dt].[dt].[dt].Members}, ([Measures].[clicks] > 1000)) 
SELECT 
NON EMPTY {[Measures].[clicks]} ON COLUMNS, 
NON EMPTY [~ROWS] ON ROWS 
FROM [OfflineData] 
Problemi correlati