2009-11-20 10 views
5

कहो मैं एक उपाय, foo, एक घन में है, और मुझे एक रिपोर्टिंग आवश्यकता है कि उपयोगकर्ताओं को एक रिपोर्ट में निम्नलिखित उपायों को देखने के लिए करना चाहते हैं:एक उपाय फ़िल्टर करना (या Outliers निकाला जा रहा है)

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

क्या है इसे संभालने का सबसे अच्छा तरीका है? अतीत में, मैंने नामांकित गणनाएं जोड़ दी हैं जो NULL वापस foo > 10 या अन्य foo अन्यथा लौटाती हैं। मुझे लगता है कि वहाँ MDX (Filter([Measures].[foo], [Measures].[foo] > 10)) की तरह कुछ में यह पूरा करने के लिए एक तरह से हो गया है, लेकिन मैं मुझे के जीवन के लिए कुछ भी समझ से बाहर नहीं कर सकते।

कोई भी विचार?

उत्तर

3

चाल है कि आप है अपने सेट पर फ़िल्टर को लागू करने की आवश्यकता नहीं है, आपके माप पर नहीं।

उदाहरण के लिए, सामान्य माइक्रोसॉफ्ट 'वेयरहाउस और बिक्री' डेमो क्यूब का उपयोग करके, निम्नलिखित एमडीएक्स उन सभी स्टोरों की बिक्री प्रदर्शित करेगा जहां बिक्री $ 2000 से अधिक थी

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

मैं अपने इनपुट की सराहना करते हैं (आयाम और उपाय के रूप में क्लिक के रूप में डीटी लगता है, हम 1000 से भी अधिक क्लिक के साथ डीटी लगाना चाहते हैं), कि सभी वांछित ई पर नहीं है मैं जिस के लिए जा रहा हूँ। आपका उदाहरण स्टोर का एक सेट फ़िल्टर करता है, लेकिन जो मैं खोज रहा हूं वह तथ्य रिकॉर्ड फ़िल्टर करने का एक तरीका है। अपने उदाहरण का उपयोग करके, मैं प्रति स्टोर औसत यूनिट बिक्री दिखाना चाहता था, मैं अभी भी हर स्टोर दिखाना चाहता हूं, लेकिन मैं नहीं चाहता कि औसत यूनिट सेल्स> 2000 को एकत्रित करें। – Colin

2

मुझे लगता है कि आप दो विकल्प हैं:

1- आपके तथ्य (या डेटा स्रोत दृश्य पर मानना ​​है कि इस तथ्य तालिका के आधार पर किया जाता है) में कॉलम जोड़ें की तरह:

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

और एक काल्पनिक इस आधार पर आयाम जोड़ने कॉलम मान और नया आयाम (के लिए नामित क्वेरी जोड़ना कहना Range_Dimension datasourceview में: रेंज संघ के रूप में 1 सभी का चयन करें रेंज

के रूप में 0 का चयन करें और taht आप अन्य आयाम और विशेषता की तरह इस फिल्टर का उपयोग किया खिचड़ी भाषा के बाद

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

समस्या यह है कि आपको प्रत्येक श्रेणी के लिए When स्थिति जोड़नी चाहिए और केवल तभी रेंज स्थिर है, यह समाधान एक अच्छा समाधान है। और गतिशील रेंज के लिए सीमा (फॉर्म को विसर्जित करने के तरीके पर) बनाने के लिए बेहतर है

2- उदाहरण के लिए तथ्य तालिका के आधार पर अगर हम प्राथमिक कुंजी Sale_id साथ हम केवल एक स्तंभ sale_Id साथ तथ्य तालिका के आधार पर आयाम जोड़ सकते हैं और dimension Usage tab हम इस से संबंधित कर सकते हैं में तथ्य तालिका है तथ्य तालिका के पास विस्तृत रूप से आयाम जोड़ new dimension और संबंध प्रकार Fact और उसके बाद MDX में हम जैसे कुछ का उपयोग कर सकते के साथ measure group:

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

मैं इसी तरह की समस्या से मुलाकात की है जब उपयोग saiku (Mondrain साथ बैकएंड), के रूप में मैं नहीं के किसी भी स्पष्ट समाधान पाया है " माप पर फ़िल्टर जोड़ें ", मैंने इसे यहां जोड़ा, और यह अन्य लड़के के लिए उपयोगी हो सकता है।

Saiku3.8 में, आप यूआई पर फ़िल्टर जोड़ सकते हैं: "कॉलम" -> "फ़िल्टर" -> "कस्टम", तो आप एक फ़िल्टर एमडीएक्स अभिव्यक्ति देख सकते हैं।1000

से अधिक क्लिक के साथ

[Measures].[clicks] > 1000 

सहेजें और बंद करें, तो उस फिल्टर खोजने ELEM के लिए मान्य होगा:

मान लें हम विज्ञापन में क्लिक चाहते हैं 1000 की तुलना में, तो निम्न पंक्ति जोड़ने के लिए अधिक से अधिक करते हैं

MDX नीचे पसंद करती है

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] 
संबंधित मुद्दे