#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,.....
первый и посмотреть, какие столбцы он на самом деле создает