2016-03-24 12 views
2

Bir veri küpünü uygulamaya çalışıyorum; böylece belirli bir boyut kümesi için bir ölçünün ortalamasını ve medyanını gösterebiliyorum. AdventureworksDW kullanarak Temel örnek:MDX MEDIAN() İşlev Hatalı Sonuçlar

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ([Product].[Product Categories].siblings, [Measures].[Reseller Sales-Order Quantity]) 
    MEMBER [Measures].[avgOrderSize] AS 
    CASE 
     WHEN [Measures].[Reseller Sales Count] = 0 THEN NULL 
     ELSE ([Measures].[Reseller Sales-Order Quantity]/[Measures].[Reseller Sales Count]) 
    END 

SELECT {[Measures].[Reseller Sales-Order Quantity], [Measures].[Median Qty], [Measures].[avgOrderSize]} ON 0, 
NON EMPTY([Product].[Product Categories].[Category]) ON 1 
FROM [Analysis Services Tutorial] 
WHERE ([Product].[Product Name].&[476]); 

çıkışı şudur: sorguda döndürülen gerçek önlemler kullandığı görülüyor olarak

Median output

Benim [Measures].[avgOrderSize] doğrudur. Ancak, gereksinimlerim için [Measures].[Median Qty] doğru değil. Değeri 6 civarında olacaktı (AdventureWorksDW2012 ürünümün bu ürünü içeren 344 satıcı siparişine sahip olduğu göz önüne alındığında). MEDIAN() tüm ürün grubu üzerinde çalışıyor gibi görünüyor?

Ben [Product].[Product Categories].siblings Bayi Satış-Sipariş Miktarı yanlış yapıyorum olarak özdeş değer döndürdü ve ben bekliyorum gibi nasıl MEDYAN() fonksiyonu harekete alabilirsiniz [Product].[Product Name].CurrentMember dahil varyasyonları denedi?

Henüz bu işlevi ancak deneyebilirsiniz şeylerin bir çift ile oynamadı ettik
+0

Her bayi siparişi için bir boyut üyesi olan (gerçek küpünüzde) bir dejenere boyutunuz var mı? SSAS'ın hangi sürümü ve Enterprise sürümü nedir? – GregGalloway

+0

@GregGalloway Gerçek verilerimizde dejenere boyutlarımız var. İlk önce AW verisinde MEDIAN'ı anlamayı umuyorum, böylece test etmek ve karşılaştırmak için bir şeyim var. SSAS 2012 Standard Edition kullanıyoruz. – wergeld

cevap

1

Uyarı. Bu yavaş olacak. Ama doğru olmalı. Korkarım Median sadece pahalı bir hesaplama. İlk parametre, dejenere boyut ve olgu tablosunda her satırda bir üye olan bir özellik olmalıdır.

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN (EXISTING [Reseller Sales].[Reseller Sales Order Number].[Reseller Sales Order Number].Members, [Measures].[Reseller Sales-Order Quantity]) 
    ... 
+0

AW boyutlarının sürümüyle çalışmak için biraz değiştirdim. Ve beklenen sonuçlara geri dönüyor gibi görünüyor. Bunu cevap olarak işaretlemek. Ancak, bu OLAP bizim canlı OLAP çalışmaz bizim dejenere boyut 4GB dosya boyutu sınırı (bu temiz bir hataydı) nedeniyle oluşturmak için başarısız olur. OLAP kullanırken yüzdelikler gösteremiyoruz gibi görünüyor. – wergeld

+0

@wergeld daha büyük boyutlara izin veren bir ayar var: https://technet.microsoft.com/en-us/library/gg471589(SQL.110).aspx ama MEDIAN'ın bu boyut boyutundan şüphelenmesi çok yavaş. – GregGalloway

+0

@GregGalloway bu nasıl işe yaramadı?[Ürün]. [Ürün Kategorileri] .siblings' (Bu test küpüm yok - Erişimim olan AdvWrks'ten farklı) – whytheq

0

şunlardır: bu muhtemelen olmasına rağmen

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ( 
     EXISTING [Product].[Product Categories].siblings 
     , [Measures].[Reseller Sales-Order Quantity] 
    ) 
... 

Exists işlevini ekleyin:

hesaplamaya EXISTING anahtar kelime ekleyin Yukarıdakilerin çok benzer:

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ( 
     EXISTS([Product].[Product Categories].siblings, [Product].[Product Name].&[476]) 
     , [Measures].[Reseller Sales-Order Quantity] 
    ) 
... 

bu deneyin:

WITH 
    MEMBER [Measures].[Median Qty] AS 
    MEDIAN ( 
     [Product].[Product Categories].currentmember.siblings 
     , [Measures].[Reseller Sales-Order Quantity] 
    ) 
... 
+0

Her iki "EXISTING" ve "EXISTS" i denedim ve bu sadece 2881 olan "Bayi Satış-Sipariş Miktarı" ile aynı değeri veriyor (bu ürün için). Öyle görünüyor ki, MEDIAN, ürünü (iyi) içeren ama sadece toplam düzeyde (kötü) olan MEDIAN'ı sadece toplam miktarın tek bir değeri için hesaplıyor. – wergeld

+0

@wergeld Üçüncü bir girişim daha ekledim! Buradaki örnek şu şekildedir: https://msdn.microsoft.com/en-us/library/ms145570.aspx?f=255&MSPPError=-2147217396 – whytheq

+0

Bu, ilk sorgumla aynı değeri döndürür - 1030.5. Basit bir şey eksik olmalıyım - Henüz ne olduğunu bilmiyorum. – wergeld