2016-08-09 5 views
1

У меня есть общий набор данных для мобильного отчета по SSRS 2016. Набор данных находится на источнике данных SSAS и имеет запрос MDX для вытягивания из куба.Запрос MDX в SSRS Общий DataSet, задающий неправильный тип данных

Первичный ключ, оттянутый от запроса, является датой и отформатирован как таковой в SSAS; однако, когда я использую набор данных в Mobile Report Publisher, он не признает его как тип даты, он считает, что это строка. Это означает, что я не могу использовать набор данных в качестве основной серии для временного графика, поскольку он не считает, что есть что-либо, отформатированное как дата.

Ниже приведен раздел MDX, который, как я думаю, вызывает проблему.

SELECT 
{ 
[Unresolved], [Assigned to Provider], [Unresolved past due date], [Other past due date], [Provider past due date], 
[Company past due date], [Provider PDD Daily Change], [Company PDD Daily Change], [Other PDD Daily Change], [Company pre due date], [Company PRDD Daily Change] 
} ON COLUMNS, 
NONEMPTY(
{ 
    [Date Snapshot].[Date].[Date] 
}) ON ROWS 
FROM [Source] 
WHERE 
(FILTER([Date Snapshot].[YQMD].[Date], [Date Snapshot].[YQMD].CURRENTMEMBER.MEMBER_KEY >= '2015-08-15')) 

ответ

1

Насколько я понимаю - язык MDX запрос не содержит тип данных «Date», следовательно, он будет преобразован в «String».

IBM support - MDX Data types

Wikipedia - MDX Data types

+0

Хорошо, это расстраивает, но я бы хотел, чтобы я смог заставить SSRS преобразовать его в дату? – Fabian0510

+0

Я думаю, вы должны просто добавить вычисленное поле в набор данных, где у вас есть формула, в которой вы преобразуете значение строки в дату (?). –

+0

Да, даже рассчитанная мера не признается как тип даты. – Fabian0510

0

Я столкнулся с этим раньше, и в ячейке табликса, где я использую одну из этих дат я использовал следующее выражение:

=format(cdate(Fields!Calendar_Day.Value),"dd MMM yy") 
0

Я закончил тем, обернув MDX в запросе T-SQL, используя OPENQUERY. Это неудобно, особенно когда мне нужно было передать параметр, но это позволило мне явно преобразовать набор результатов в любой тип данных, который я хотел. Urgh.

+0

Я бы не рекомендовал ваше решение ... см. Другие ответы, преобразующие строку с помощью функции cdate. Это должно быть допустимым вариантом для использования с SSRS и не добавлять в качестве зависимости от вашего сервера sql. Данные также должны передаваться от куба к серверу sql для пользователя, выполняющего отчет. –

1

У меня была та же проблема. Вы можете обойти это путем создания члена на уровне MDX запроса с помощью функции VBA:

С ЧЛЕНА [Дата] AS CDate ([Дата снимка] [дата] .CURRENTMEMBER.Name.)

SELECT. ..

Дата вашего снимка должна иметь один из предлагаемых форматов. Если функция cdate() должна делать трюк. SSRS Mobile Publisher распознает его как дату вместо строки.

2

Update: с SQL Server 2016 с пакетом обновления 1 обходной путь пояснено ниже is no longer necessary и даты должны быть распознан правильно, не делая ничего особенного:

Чтобы попробовать эту новую функциональность вне, создайте простой запрос MDX с помощью конструктора запросов, которые включает поле даты из вашей модели данных. Когда вы будете использовать этот общий набор данных с помощью Mobile Report Publisher, он будет правильно распознавать поле даты из вашего запроса без необходимости дополнительной расчетной меры.

оригинальный текст ответа следующим образом:

Причина, почему это происходит, объясняется в official Microsoft documentation:

Тип возврата по умолчанию для запросов служб Analysis Services является строкой. Когда вы создаете набор данных в построителе отчетов служб отчетов, тип строки соблюдается и сохраняется на сервере.

Однако, когда обработчик таблицы JSON обрабатывает набор данных, он считывает значение значение столбца в виде строки и выводит строки. Затем, когда SQL Server Mobile Report Publisher извлекает таблицу, он также видит только строки .

Официальный обходной путь также объясняется там:

Обойти это добавить вычисляемый элемент, когда вы создание общего набора данных в Report Builder.

Пример такого вычисляемого элемента (из here):

cdate(format([Date].[Date].CURRENTMEMBER.MEMBER_VALUE, "yyyy-MM-dd")) 

Но это обходной путь (как указывал Victor_Rocca в комментарии к официальной документации Microsoft) есть большая проблема:

недостатком является то, что он будет возвращать все даты, которые были выбраны в запросе, а не только те, которые имеют значение , связанное с ним в вашем кубе (по существу, удаление поведения NON EMPTY из запроса MDX). При просмотре большого количества записей через это может значительно повлиять на производительность вашего отчета.

Так что я думаю, что есть лучший обходной путь, который создает вычисляемое поле в наборе данных:

new dataset calculated field

с таким выражением, как этот (предполагается, что имя вашего поля «Дата» и что он возвращает уникальные имена, такие как [Date Snapshot]. [Дата]. [Дата]. & [2010-01-01T00: 00: 00] и [Дата моментального снимка]. [Дата]. [Дата]. & [2010-12-31T00: 00: 00]:

=CDate(mid(Fields!Date("UniqueName"),33,10)) 

Таким образом, вам не нужно вручную редактировать поведение MDX и NON EMPTY. Это новое поле получает правильно идентифицирован как дата тип данных в мобильном Report Издательство:

date datatype

В любом случае, помощь на дороге, по this post на основе информации, полученной на последнем проходе саммита (октябрь 2016 года), то В настоящее время разрабатывается:

Улучшенная поддержка сгенерированного MDX. Обходное решение текущей даты не потребует больше времени и облегчит жизнь каждого человека.

0

Единственный способ, которым я сумел получить MRP признать свою дату в качестве реальной даты для фильтрации корыта времени штурмана добавляли вычисляемый мера, основанный на MemberValue в Date Dimension.

E.g.:

WITH MEMBER [Measures].[Date2] AS ([_Reference Period].[Date].CurrentMember.MemberValue) 

И после этого добавления поля [Measures].[Date2] к мерам запроса:

ВЫБОР непустых {. [Мер] [Дата2]} на колонны, непустой {([_ReferencePeriod ] [Дата]. [Дата] .ALLMEMBERS * [Компании]. [Компания]. [Компания] .ALLMEMBERS * [Контракт]. [Тип]. [Тип] .ALLMEMBERS * [Сотрудник]. [Пол]. [Пол. ]. [ПАРАМЕТРЫ СОБЫТИЙ] [Тип ситуации]. [Тип ситуации]. [Тип ситуации]. ПАМЯТНИКИ)} ПРОМЕЖУТОЧНЫЕ СВОЙСТВА MEMBER_CAPTION, MEMBER_VALUE, MEMBER_UNIQUE_NAME В ROWS ИЗ [ИСТОЧНИК] СВОЙСТВА СВОЙСТВ, ИМЕЮТ, BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE , FONT_FLAGS