Anlama Pass sipariş ve sipariş (mdx) çözmek
Bir küp mdx komut dosyası bir sonucu olarak hesaplandığında, pek çok hesaplama ile ilgili çeşitli özelliklerinin kullanımı bağlı hesaplama aşamalarını gidebilirsiniz.Bu evreler olarak adlandırılmıştır bir hesaplama geçişi.
A hesaplama geçişi adlı bir sıra konuma göre baþvurulabilir hesaplama geçişi numarası.Sayısı hesaplama geçişitam bir küpün tüm hücreleri hesaplamak için gereken es olarak anılacaktır hesaplama geçişi küp derinliği.
Bulgular tablo ve geri yazma verileri yalnızca pass 0 olumsuz.Komut 0 geçişinden sonra verileri doldurmak; her atama ve hesaplama deyim bir komut dosyasında yeni bir geçiş oluşturur.mdx komut dosyası başvurular mutlak pass 0 son küp komut dosyası tarafından oluşturulan geçişi başvurun.
Hesaplanan üyeleri tüm geçişleri sırasında oluşturulan, ancak ifade geçerli geçişi sırasında uygulanır.Önceki geçişleri içeren hesaplanan ölçü birimi, ancak null değer.
Çözüm sırası
Çözüm sırası hesaplamasına önceliğini belirler olay rakip ifadelerin.İçinde tek bir geçiş çözme sırası iki şey belirler:
The order in which Microsoft SQL Server Analysis Services evaluates dimensions, members, calculated members, custom rollups, and calculated cells.
Sırayı Analysis Services hesaplar özel üyeleri, hesaplanan üyeler, özel toplamave hesaplanan hücreler.
En yüksek çözme sırası ile üye önceliklidir.
Not
Bu öncelik için toplama istisnadır işlev.Hesaplanan üyeleri ile toplama işlev kesişen bir hesaplanan ölçü birimi'den daha düşük bir çözme sırası vardır.
Sipariş değerleri ve önceliği çözmek
Sipariş değerleri can çözmek aralık dan 65535'e kadar-8181.Bu aralık, bazı değerlere karşılık hesaplamaları, belirli türde aşağıdaki gösterildiği gibi çözüm sırası tablo.
Hesaplama |
Çözüm sırası |
---|---|
Özel üye formüller |
-5119 |
Tekli operatörler |
-5119 |
Görsel toplamları hesaplama |
-4096 |
(Aksi belirtilmişse) tüm diğer hesaplamaları |
0 |
Yalnızca pozitif tamsayılara ayarlarken kullanmanızı öneririz çözme sırası değerler.Önceki alıştırmada gösterilen çözme sırası değerlerden daha düşük değerleri atarsanız, tablo, unpredic hesaplama pass haline gelebilirtablo.Örneğin, varsayılan değerinden daha düşük bir çözme sırası değeri hesaplama Hesaplanan üye için aldığı özel toplama formül değerini-5119.Böyle bir düşük çözme sırası değeri hesaplanan üyeler önce özel toplaması formülleri hesaplanacak olur ve yanlış sonuçlar verebilir.
Çözüm sırası oluşturma ve değiştirme
Küp Tasarımcısı'nda bulunan Hesaplamalar bölmesi, değiştirebileceğiniz çözme sırası hesaplanan üyeler ve hesaplanan hücreleri hesaplama sırasını değiştirerek.
mdx içinde kullanabileceğiniz SOLVE_ORDER anahtar oluşturmaya veya değiştirmeye hesaplanan üyeler ve hesaplanan hücreler.
Sipariş örnekleri çözmek
Potansiyel anlamda çözüm sırasını göstermek için aşağıdaki mdx sorguları bir dizi her hiçbir çözme sırası sorunları tek tek sahip iki sorgu ile başlar.Bu iki sorgunun ardından gerektiren bir sorgu birleştirilen çözme sırası.
1 Sorgu — gelir ve giderleri arasındaki farklılıklar
İlk mdx sorgusu için gelir ve masrafların her yarı yıl için farkı görmek için basit bir mdx sorgu aşağıdaki örneğe benzer oluşturun:
WITH
MEMBER [Time].[Year Difference] AS
[Time].[2nd half] - [Time].[1st half]
SELECT
{ [Account].[Income], [Account].[Expenses] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS
FROM Financials
Bu sorgu, tek bir hesaplanan üye olduğu Year Difference.Yalnızca bir hesaplanan üye olduğundan, çözme sırası olarak uzun bir sorun değildir küp tüm hesaplanan üyeler kullanmaz.
Bu mdx sorgusu aşağıdakine benzer bir sonuç üreten tablo.
Gelir |
Giderleri |
|
---|---|---|
1. yarı |
5000 |
4200 |
2. yarı |
8000 |
7000 |
Yıl fark |
3000 |
2800 |
2 Sorgu — giderler sonra Net gelir yüzdesi
İkinci sorgu için Harcamalar her yarı yıl sonra net geliri yüzdesini görmek için aşağıdaki mdx sorgusu kullanın:
WITH
MEMBER [Account].[Net Income] AS
([Account].[Income], [Account].[Expenses]) / [Account].[Income]
SELECT
{ [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half] } ON ROWS
FROM Financials
Yalnızca tek bir öncekinin gibi bu mdx sorgusu olan hesaplanan üye, Net Incomeve bu nedenle hiçbir çözme sırası zorluklar. yok
Bu mdx sorgusu aşağıdakine benzer biraz farklı sonuç küme üreten tablo.
Gelir |
Giderleri |
NET gelir |
|
---|---|---|---|
1. yarı |
5000 |
4200 |
0.16 |
2. yarı |
8000 |
7000 |
0.125 |
hesaplanan üye yerleşimini farkı sonuç kümesindeki ilk sorguyu İkinci sorguyu arasındaki fark gelir.İlk sorguda hesaplanan üye değil ikinci sorguda gösterilen SÜTUNLARI eksen satır ekseni bir parçasıdır.Bu fark yerleştirme birleştiren tek bir mdx sorgusu iki hesaplanan üyeleri bir sonraki sorgu önemli rol oynayacaktır.
3 Sorgu — yıl fark ve Net gelir hesaplamalar Birleşik
Önceki örneklerde her ikisi de tek bir mdx sorgusu birleştiren bu son sorgu, çözme sırası önemli hale gelir.Tanımlayın hesaplamaları ortaya çıktığı kullanarak sırası hesaplamaları doğru sırayla ortaya emin olmak için SOLVE_ORDER anahtar sözcüğü.
The SOLVE_ORDER keyword specifies the solve order of calculated members in an MDX query or a CREATE MEMBER command.Tamsayı değerler ile kullanılan SOLVE_ORDER göreli anahtar sözcüğü, sıfırdan başlar ve sağlamadığı için ardışık olması gerekmez.Değer yalnızca üye üyeleri ile daha yüksek bir değer hesaplama den türetilen değerleri temel alarak hesaplamak için mdx söyler.Hesaplanan üye olmadan tanımlanırsa, SOLVE_ORDER anahtar sözcüğü, varsayılan değer olarak, hesaplanan üye sıfır.
Örneğin, ilk iki örnek sorgularında kullanılan hesaplamaları birleştirirseniz, iki üyeleri, hesaplanan Year Difference ve Net Income, tek bir kesişen hücre sonucu DataSet mdx sorgusu örneği.Belirlemenin tek yolu nasıl Analysis Services Bu değerlendirir hücre olan çözme sırası. tarafındanBu hücre oluşturmak için kullanılan formüllerin bağlı olarak farklı sonuçlar çözme sırası ikisi, hesaplanan üyeler.
İlk olarak, aşağıdaki mdx sorgusu ilk iki sorgularda kullanılan hesaplamaları birleştirme deneyin:
WITH
MEMBER [Time].[Year Difference] AS
'[Time].[2nd half] - [Time].[1st half],
SOLVE_ORDER = 1
MEMBER [Account].[Net Income] AS
'([Account].[Income] - [Account].[Expenses]) / [Account].[Income]',
SOLVE_ORDER = 2
SELECT
{ [Account].[Income], [Account].[Expenses], [Account].[Net Income] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS
FROM Financials
In this combined MDX query example, Net Income has the highest solve order, so it takes precedence when the two expressions interact.Analysis Services evaluates the cell in question by using the Net Income formula.Bu sonuçlar iç içe, hesaplama aşağıdaki gösterildiği gibi tablo.
Gelir |
Giderleri |
NET gelir |
|
---|---|---|---|
1. yarı |
5000 |
4200 |
0.16 |
2. yarı |
8000 |
7000 |
0.125 |
Yıl fark |
3000 |
2800 |
0.066 |
Sonuçta paylaşılan hücre formülü esas Net Income.Yani, Analysis Services paylaşılan sonucu hesaplar hücre ile Year Difference (netlik için sonuç yuvarlanır) aşağıdaki formül üretir, veri:
((8000 - 5000) - (7000 - 4200)) / (8000 - 5000) = 0.066
veya
(3000 - 2800) / 3000 = 0.066
Ancak, Analysis Services paylaşılan sonucu hesaplar hücre farklı bir şekilde, çözüm için hesaplanan üye mdx sorgusu. sıralamalarını,Aşağıdaki mdx sorgusu tersine çevirir Birleşik çözme sırası hesaplanan üyeler için:
WITH
MEMBER [Time].[Year Difference] AS
'[Time].[2nd half] - [Time].[1st half],
SOLVE_ORDER = 2
MEMBER [Money].[Net Income] AS
'([Money].[Income] - [Money].[Expenses]) / [Money].[Income]',
SOLVE_ORDER = 1
SELECT
{ [Money].[Income], [Money].[Expenses], [Money].[Net Income] } ON COLUMNS,
{ [Time].[1st half], [Time].[2nd half], [Time].[Year Difference] } ON ROWS
FROM TestCube
Hesaplanan üyeler sırası geçti gibi Analysis Services kullanan Year Difference gibi gösterilen aşağıdaki tablo. hücre değerlendirmek için formül
Gelir |
Giderleri |
NET gelir |
|
---|---|---|---|
1. yarı |
5000 |
4200 |
0.16 |
2. yarı |
8000 |
7000 |
0.125 |
Yıl fark |
3000 |
2800 |
-0.035 |
Bu sorguyu kullanır çünkü Year Difference formülü ile Net Income veriler, paylaşılan formülü hücre aşağıdaki hesaplamayı benzer:
((8000 - 7000) / 8000) - ((5000 - 4200) / 5000) = -0.035
Or
0.125 - 0.16 = -0.035
Dikkat edilecek diğer noktalar
Çözmek olması, özellikle de küpleri ile hesaplanan üye ilgilendiren boyutlar çok sayıda çalışılabilecek çok karmaşık bir sorun özel toplama formülleri veya hesaplanan hücre.Zaman Analysis Services değerlendiren bir mdx sorgusu Analysis Services katılan bir verilen geçişi, belirtilen mdx sorgusu küp boyutları da dahil olmak üzere içindeki her şeyi için çözme sırası değerleri dikkate alır
Ayrıca bkz.