Я не понимаю функцию OPENQUERY

#tsql #reporting-services #sql-server-2016 #openquery #mdx-query

#tsql #службы отчетов #sql-server-2016 #openquery #многомерные выражения-запрос

Вопрос:

Мне нужна помощь в понимании структуры OPENQUERY.

Я пытаюсь понять, почему следующий запрос (в Microsoft SQL Server Management Studio 2016 (версия 13.0.16106.4)) выдает только ошибку

 WITH MDXQuery
(
  [AKPIValue]  
)
as
( 
  SELECT     
    convert(decimal(20,2) ,"[KPIValue]") as AKPIValue    
  FROM OPENQUERY(SSAS2,
    'WITH
       MEMBER [KPIValue] AS 10 --(([Measures].[AverageOverTime], [Signal].[Type].[E-Current]))
    SELECT NON EMPTY
    {
      [KPIValue]
    }ON COLUMNS
    ,
    {
      [Time].[Week Calendar].[Day]} * {[Device].[Devices].amp;[{873AADF4-3D7A-4F25-A6BD-EC1E0A7077C6}]
    } 
    dimension Properties MEMBER_CAPTION, MEMBER_KEY ON ROWS
    FROM 
    (
      SELECT
      {
        [Time].[Month].amp;[2019-12-01T00:00:00]:[Time].[Month].amp;[2020-03-01T00:00:00]
      } ON COLUMNS     
      from [Measurements]
    )' 
  )
)


SELECT
  MDXQuery.*
From 
  MDXQuery;
 

в то время как другой запрос не

 with MQ
(
  [LastActivity]
  ,[LurtActivity]
)
as
(
SELECT 
  convert(nvarchar(max),"[Measures].[LastActivity]") as ABC
  ,convert(nvarchar(max),"[Measures].[LurtActivity]") as ABCDE
FROM OPENQUERY(SSAS2,
  'with 
     member [Measures].[LastActivity] as Tail(nonempty([Time].[Minute].[Minute].MEMBERS,[Measures].[Count]),1).Item(0).Name
     member [Measures].[LurtActivity] as 10
   select 
     NON EMPTY 
     {
       [Measures].[LastActivity]
       ,[Measures].[LurtActivity]
     } ON COLUMNS
   from [Measurements]' 
))

Select MQ.* from MQ;
 

Когда я выполняю первый, я всегда получаю сообщение об ошибке «Недопустимое имя столбца'[KPIValue]'», и я не знаю почему.

Я пытался понять структуру запроса, немного поиграв с синтаксисом, чтобы посмотреть, смогу ли я различить шаблон, поскольку пока не смог найти правильные объяснения в Интернете.

Например, я не знаю, почему мне нужно использовать двойные кавычки в строке

 convert(nvarchar(max),"[Measures].[LastActivity]") as ABC
 

Или почему «как ABC» кажется неуместным.

Если я выполняю любой из многомерных запросов в SSRS, я получаю результирующий набор обратно.

Комментарии:

1. "[KPIValue]" является синонимом для [[KPIValue]]] . Ваш столбец просто вызывается KPIValue , и если вы определяете его, что вам не нужно, это будет [KPIValue] (с использованием синтаксиса Transact-SQL) или "KPIValue" (с использованием синтаксиса ISO SQL). Это просто опечатка; удалите дополнительные идентификаторы-разделители или даже оба.

2. @Larnu насколько я знаю, [и] используется, когда в имени есть пробелы или для навигации по измерениям в кубе. Я изменил все вхождения [KPIValue] на KPIValue и теперь получаю сообщение об ошибке 7321, уровень 16, состояние 2, строка 64

3. «Сообщение об ошибке 7321, уровень 16, состояние 2, строка 64» — это не полная ошибка…

4. Произошла ошибка при подготовке запроса «С ПОМОЩЬЮ …)» для выполнения с поставщиком OLE DB «MSOLAP» для связанного сервера «SSAS2». Остальное, если это поможет

5. Почему бы вам не попробовать SELECT * FROM FROM OPENQUERY(SSAS2,..... первый и посмотреть, какие столбцы он на самом деле создает