Проблема с запросом многомерных выражений

В аналитических сервисах у меня есть куб, основанный на данных о госпитализации. Для каждой госпитализации потенциально существует 9 кодов icd, каждый из которых хранится в своем собственном поле в представлении, на котором основан куб. Они хранятся в дочерней таблице в реляционной базе данных, на которой основана база данных SSAS.

Я хотел бы запросить куб, чтобы вернуть все строки, которые имеют определенный код ICD в одном или нескольких из 9 полей кода ICD. Кажется, что такой вариант «ИЛИ» в предложении WHERE или Filter должен быть простым, но я не нахожу правильный метод.

Заранее спасибо, Джереми Шредер


person Jeremy Schrader    schedule 19.08.2010    source источник
comment
Я думаю, вам нужно рассказать нам, каково ваше измерение ICD, чтобы мы могли дать вам пример части MDX. Не беспокойтесь о том, как устроено представление куба или база данных SSAS - просто сообщите нам, что куб показывает конечному пользователю.   -  person Magnus Smith    schedule 24.08.2010


Ответы (3)


Насколько я понимаю, вы специалист по SQL и новичок в MDX, поэтому у вас возникают трудности с запросом.

Было бы лучше, если бы вы сказали нам, какие меры вы хотите выбрать с помощью кодов ICD, но я попытаюсь показать вам образец запроса MDX как можно проще. Ваш запрос должен выглядеть ниже;

select {Measure1,Measure2,...} on columns
ICDCodeDimension.Children on rows
//{ICDCodeDimension.ICDCode1,ICDCodeDimension.ICDCode5,...} on rows
from Cube

MDX - это очень продвинутый язык запросов, и вы должны знать / изучать множество других концепций, чтобы использовать его эффективно.

Надеюсь на эту помощь.

person orka    schedule 20.08.2010
comment
Определенно! Не думайте, что MDX - это что-то вроде SQL, иначе вы повредите себе голову. Концепция OR и AND сильно различается, поскольку вы имеете дело с агрегациями по категориям. - person Magnus Smith; 24.08.2010
comment
Спасибо за ваш отзыв. Посмотрите мой ответ ниже и скажите, поступили бы вы именно так. - person Jeremy Schrader; 25.08.2010
comment
Джереми, извини, но ты все равно идешь неверным путем. После небольшого поиска я нашел для вас этот документ. Предлагаю вам прочитать его, прежде чем принимать какое-либо решение. Введение в многомерные выражения. - person orka; 26.08.2010

Я предполагаю, что у вас будет измерение под названием [Коды ICD] с одним уровнем, называемым [Коды], и 9 элементами, называемыми [Код A] и [Код B], или как-то еще. Возможно, даже член [Без кода]?

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

SELECT {[ICD Codes].[Codes].members} ON ROWS,
{[Measures].[Number of Cases]} ON COLUMNS
FROM [CubeName]
WHERE ([Time].[2010].[Quarter 1])
person Magnus Smith    schedule 24.08.2010

Спасибо за оба отзыва. После того, как я продолжил исследование (в частности, статья здесь: http://sqlblog.com/blogs/mosha/default.aspx, который использует метод SUBCUBE для предоставления некоторой функциональности «ИЛИ», но с очень низкой производительностью). Я понял, что искомая конструкция ИЛИ требует информации на уровне записи и поэтому не работает после агрегирования. что SSAS выполняет. Таким образом, мне нужно создать поле в таблице фактов, которое будет иметь результат SQL-оператора «ИЛИ», который мне нужен.

В этом случае я просто создам флаг для любой записи, которая имеет определенный диапазон кодов ICD в любом из 9 полей кода ICD. Затем я создам меру, которая подсчитывает их. К счастью, требования моего приложения заключаются в том, что таким образом нужно рассматривать только ограниченное количество диагнозов (например, любую госпитализацию, связанную с диабетом, табаком и т. Д.). Мне все еще любопытно, как можно было бы подойти к этому, если бы вам нужно было разрешить пользователю выбирать любой код ICD. На данный момент я понимаю, что вам нужно будет вернуться к простому SQL.

Джереми

person Jeremy Schrader    schedule 25.08.2010