В чем разница между WHERE и FROM в запросе MDX?

В чем разница между WHERE и FROM с точки зрения T-SQL.

См. копию Pivot Table MDX. У меня есть фильтры по [Статус клиента], [Дата создания запроса. Иерархия дат] и [Иерархия групп пользователей] в сводной таблице.

Я не понимаю, почему одни фильтры идут ОТКУДА, а другие ОТКУДА.

SELECT
{ [Measures].[Unique Cust Ref Distinct Count], [Measures].[Number of Distinct Customers] } ON COLUMNS,
{ [Request].[Cust Type].children } ON ROWS
FROM (
  SELECT (
  { [Request].[Request Created By Team].&[CINS]
    ,[Request].[Request Created By Team].&[CIST]
    ,[Request].[Request Created By Team].&[DCISS]
    , [Request].[Request Created By Team].&[WRT] } ) ON COLUMNS
  FROM [CRM Reporting]
)
WHERE ( [Customer].[Customer Status].&[Active], [Request Creation Date].[Date Hierarchy].[Year].&[2014] ) 

person BI Dude    schedule 20.02.2014    source источник
comment
Хорошая вещь во многих ключевых словах заключается в том, что название ключевого слова указывает, о чем оно. Так ОТ значит - данные из источников - а Откуда значит... ну данные где выполняются какие-то условия.   -  person Allan S. Hansen    schedule 20.02.2014
comment
@AllanS.Hansen Условия могут выполняться как в FROM, так и в WHERE; поэтому это так запутанно.   -  person BI Dude    schedule 17.02.2015


Ответы (1)


Основные различия между WHERE и подзапросом в многомерных выражениях:

  • WHERE изменяет ось среза, что означает, что вы не можете поместить какую-либо иерархию на какую-либо другую ось, например столбцы и строки.
  • Subselect не изменяет параметр CurrentMember. Это означает, что более вероятно, что у вас могут возникнуть проблемы, если вы используете множественный выбор в условии WHERE. С другой стороны, вы не можете легко ссылаться на выбранные элементы, если вы используете множественный выбор в подзапросе, вы должны использовать что-то вроде EXISTS.
  • Subselect изменяет значение элемента All выбранных иерархий ("VisualTotals") — по крайней мере, в настройках по умолчанию. Однако, как правило, другое поведение условия WHERE в отношении этого не видно, так как элемент All, поскольку он является частью иерархии, не может быть помещен ни на какую другую ось. Однако на него можно ссылаться в вычисляемых элементах.
  • Подвыборки могут быть вложенными, WHERE — нет.
  • С точки зрения производительности, иногда одно, а иногда другое лучше. Вам придется протестировать.
person FrankPl    schedule 20.02.2014