Элемент уровня фильтра многомерных выражений

Мой вопрос заключается в том, как отфильтровать действительное поле по другому полю в MDX.

У меня есть одна таблица: образцы; если я использую sql для решения проблемы, вот так:

select patient_id from samples where calc_test_type_id = 1;

Я создал для этого измерение: Иерархия характеристик пациента: уровень идентификатора: идентификатор (идентификатор пациента в таблице образцов), включая свойство с именем «testA», «testA», связанное с calc_test_type_id.

Итак, я попробовал MDX следующим образом:

SELECT
{[Measures].[num_samples]} ON COLUMNS,

{
  filter
       (
       distinct([Patient characteristic.id].[id].members),
       [Patient characteristic.id].CurrentMember.Properties("calc_type") = 1
       )
} ON ROWS
FROM [EIDCube]

[Measures].[num_samples] — вычислить количество строк для calc_test_type_id = 1.

Но я обнаружил, что некоторые данные потеряны. Итак, как найти все подходящие идентификаторы пациентов?


person Angela Tian    schedule 02.06.2015    source источник
comment
Если [Measures].[num_samples] нужно вычислить, сколько строк для calc_test_type_id = 1, почему вы все еще используете фильтр? Каков предполагаемый результат? Пожалуйста, добавьте пример, если это возможно.   -  person SouravA    schedule 02.06.2015
comment
Привет, [Measures].[num_samples] просто для проверки результата фильтра. Я хотел бы отфильтровать id_patient как sql: выберите id_patient из образцов, где calc_test_type_id = 1;   -  person Angela Tian    schedule 02.06.2015


Ответы (1)


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

WITH SET [calc_type1] AS
  FILTER
       (
         [Patient characteristic.id].[id].members)
        ,[Patient characteristic.id].CurrentMember.Properties("calc_type") = 1
       )
SELECT
  {[Measures].[num_samples]} ON 0,
   [calc_type1] ON 1
FROM [EIDCube];

Чтобы проверить возвращенный набор, у меня возникнет соблазн сначала запустить этот скрипт без этой меры, например:

WITH SET [calc_type1] AS
  FILTER
       (
         [Patient characteristic.id].[id].members)
        ,[Patient characteristic.id].CurrentMember.Properties("calc_type") = 1
       )
SELECT
  {} ON 0,
  [calc_type1] ON 1
FROM [EIDCube];
person whytheq    schedule 02.06.2015
comment
Я пробовал это, но это не работает. Я думаю, что куб ошибается в этом измерении. В измерении характеристик пациента у него есть иерархия идентификаторов, иерархия идентификаторов имеет уровень идентификатора, столбец уровня идентификатора находится в столбце пациента_id (пример таблицы), а уровень имеет свойство «calc_type», «calc_type» — в столбце calc_test_type_id (пример таблицы). Возможно, столбец свойств неправильно связан с уровнем идентификатора (столбецpatient_id). Но я не могу его распознать. - person Angela Tian; 03.06.2015
comment
Кажется, Мондриан не может связать элемент уровня и его свойства для одной и той же строки. - person Angela Tian; 03.06.2015
comment
Я нашел свою проблему, свойство не поддерживает отношение n:n .. большое спасибо! - person Angela Tian; 03.06.2015