2014-11-07 3 views
1

Обычай меры в взят из книги MDX Cookbook (Томислав Piasevoli) следующее:Ever потребность в CurrentMember.Item (0)

WITH 
    MEMBER [Internet Sales PP] AS 
    Sum 
    (
     Generate 
     (
     { 
      [Date].[Calendar].[Date].&[20080105] 
      : 
      [Date].[Calendar].[Date].&[20080125] 
     } 
     ,{ 
      ParallelPeriod 
      (
      [Date].[Calendar].[Calendar Year] 
      ,1 
      ,[Date].[Calendar].CurrentMember.Item(0) 
     ) 
     } 
    ) 
    ,[Measures].[Internet Sales Amount] 
    ) 
SELECT 
    { 
    [Measures].[Internet Sales Amount] 
    ,[Internet Sales PP] 
    } ON 0 
,[Product].[Color].MEMBERS ON 1 
FROM [Adventure Works]; 

Какую цель делает item(0) служить?

Мое понимание, что, вероятно, неправильно это

  • <set>.item(0) дает нам первый кортеж в наборе
  • <tuple>.item(0) дает нам первый элемент в кортеже

Так что точка <member>.item(0)?

ответ

2

См. this замечательная статья по теме.

Чтобы подвести итог, когда мы делаем .ITEM(0) на члене, этот член неявно преобразуется в кортеж. Таким образом, .ITEM(0) действительно не служит никакой цели, кроме как вернуть сам элемент.

+0

+1 отличная ссылка sourav - выглядит как интересный блог – whytheq

1

Я бы предположил, что это опечатка или ошибка копирования. По крайней мере, в official Microsoft MDX reference есть только две версии Item(), которые вы упомянули.

И это не приводит к ошибке, так как есть некоторые Неявные преобразования типов:

  • Если у вас есть член и нужен кортеж для текущего выражения, AS неявно создает один-член кортеж из член. Это то, что происходит здесь, предположительно, при применении Item(0) к члену.
  • Если у вас есть один членский кортеж и ему нужен элемент для текущего выражения, AS неявно применяет Item(0).
  • Существуют аналогичные неявные преобразования из кортежа и уровня для установки: от кортежа до скалярного значения, от измерения до иерархии и от иерархии до члена.
+0

Это не вызывает ошибки. Я полагаю, что '.currentmember' и' .currentmember.item (0) 'всегда одинаковы? – whytheq

+0

+1 Также я добавил его здесь: https://social.msdn.microsoft.com/Forums/sqlserver/en-US/9e47a391-6d17-4146-9850-af75c55fe63e/why-use-currentmemberitem0?forum=sqlanalysisservices – whytheq

+0

@whytheq Да, через неявное преобразование типа (см. Мое редактирование) – FrankPl

Смежные вопросы