Вернуть всех детей, где хотя бы один из них существует у одного и того же родителя - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь написать запрос MDX, который, по моему мнению, похож на where exists в SQL. У нас есть Files, которые сделаны из SubFiles, и каждый SubFile находится в Location. Существует измерение для Locations и измерение для Files (содержащее иерархию File -> SubFile), а также счетчик всех SubFiles.

Итак, следующий MDX:

select
    [Location].[Location].members on 0,
    [File].[File].members on 1
from
    [MyCube]

возвращает что-то вроде:

             | LocA | LocB | LocC | LocD
----------------------------------------
FileA        | null |  2   |   2  | null
FileB        |  1   |  2   | null | null
FileC        | null | null |   1  |  2

Это показывает, что, например, FileA имеет 2 SubFiles в LocB и 2 SubFiles в LocC (и ни в LocA или LocD). Всего 4 SubFiles.

Что мне нужно сделать, так это для данного Location вернуть все SubFiles, где хотя бы один SubFile под тем же File в данном Location. Так, например, для приведенного выше примера, если заданное местоположение было LocC, результирующий набор должен быть:

             | LocA | LocB | LocC | LocD
----------------------------------------
FileA        |
   SubFileA1 | null | null |   1  | null
   SubFileA2 | null |   1  | null | null
   SubFileA3 | null |   1  | null | null
   SubFileA4 | null | null |   1  | null
FileC        |
   SubFileC1 | null | null | null |   1
   SubFileC2 | null | null |   1  | null
   SubFileC3 | null | null | null |   1

Итак все SubFiles для FileA и FileC возвращаются, поскольку они имеют по крайней мере 1 SubFile в LocC, в то время как FileB не возвращается, поскольку не имеет SubFiles в LocC.

Как мне добиться этого в MDX?

1 Ответ

0 голосов
/ 29 июня 2018

Вы можете использовать функцию Exists для получения файлов, а затем функцию Descendants для добавления подфайлов:

select
    [Location].[Location].members
    on 0,
    Descendants(
        Exists(
            [File].[File -> SubFile].[File].members, 
            {[Location].[Location].[LocC]}
        ), 
        [File].[File -> SubFile].[SubFile],
        SELF_AND_BEFORE
    )
    on 1
from
    [MyCube]
...