2009-11-20 15 views
5

Digamos que tiene una medida, foo, en un cubo, y tengo un requisito de información que los usuarios quieren ver las siguientes medidas en un informe:Filtrado de una Medida (o eliminación de valores atípicos)

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

¿Cuál es la mejor manera de manejar esto? En el pasado, he agregado Cálculos con nombre que devuelven NULL si foo > 10 o solo foo de lo contrario. siento que tiene que haber una manera de lograr esto en MDX (algo así como Filter([Measures].[foo], [Measures].[foo] > 10)), pero no puedo por la vida de mí descifrar nada.

¿Alguna idea?

Respuesta

3

El truco es que se necesita aplicar el filtro en su conjunto, no en su medida.

Por ejemplo, utilizando el cubo demo de 'almacén y ventas' habitual de Microsoft, el siguiente MDX mostrará las ventas de todas las tiendas donde las ventas fueron superiores a $ 2000

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

aprecio su entrada, que no es en absoluto la dirección deseada ffecto que estoy buscando. Su ejemplo filtra un conjunto de Tiendas, pero lo que estoy buscando es una forma de filtrar los registros de hechos. Usando su ejemplo, digamos que quería mostrar el promedio de ventas por unidad por tienda, aún así quiero mostrar todas las tiendas, pero no quiero que el promedio agregue Ventas por unidad> 2000. – Colin

2

yo creo que hay dos opciones:

1- Añadir columna a la realidad (o punto de vista sobre vista del origen de datos que se basa en la tabla de hechos) como:

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

y añadir una dimensión ficticia basada en este valor de las columnas y añadir consulta con nombre para la nueva dimensión (digamos Range_Dimension en DataSourceView: seleccione 1 como el rango unión de todo seleccione 0 como el rango

y después se convertía usted no puede utilizó este filtro como otra dimensión y el atributo

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

el problema es para cada rango debe agregar When condición y sólo si el rango es estática esta solución es una buena solución. y un rango dinámico que es mejor para formular la gama (basado en el método disceretizing)

2- añadir dimensión con granularidad cerca de tabla de hechos sobre la base de tabla de hechos por ejemplo, si tenemos tabla de hechos con la clave primaria Sale_id .we puede añadir dimensión basada en la tabla de hechos con una sola columna sale_Id y en dimension Usage tab podemos relacionar esto new dimension y measure group con relación tipo Fact y después de que en MDX podemos usar algo como:

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

me encontré con un problema similar cuando el uso Saiku (back-end con Mondrain), ya que no he encontrado ninguna solución clara de " agregar filtro en medida ", lo agregué aquí, y eso puede ser útil para otro tipo.

En Saiku3.8, puede agregar filtro en la IU: "columna" -> "filtro" -> "personalizado", entonces puede ver una expresión de filtro MDX.

Supongamos que queremos clics en D mayor de 1000, a continuación, añadir la siguiente línea hay:

[Measures].[clicks] > 1000 

Guardar y cerrar, a continuación, ese filtro serán válidos para encontrar elem con clics mayor que 1000.

el MDX le gusta a continuación (supongamos dt como la dimensión y clics como medida, queremos encontrar dt con clics más de 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] 
Cuestiones relacionadas