У меня есть 4 отдельных измерения, которые меня интересуют: (A, B, C дата). Каждое измерение имеет несколько иерархий атрибутов. Каждое измерение теоретически сопоставляется друг с другом. C -> B -> A. Другими словами, несколько элементов B сопоставляются с одним элементом в A, а несколько элементов C сопоставляются с одним элементом B.
Первоначально у меня был следующий запрос, который работал
SELECT
(
[Measures].[Count]
)
ON COLUMNS,
(
[A].[Id].[Id].MEMBERS,
FILTER
(
[A].[Name].[Name].MEMBERS,
LEFT([A].[Name].CURRENTMEMBER.NAME, 4) <> "test"
),
[A].[Start].[Start].MEMBERS,
[A].[Owner].[Owner].MEMBERS
)
ON ROWS
FROM
(
SELECT
(
{[A].[Start].&[2020-05-10] : [A].[Start].&[2020-05-25]}
)
ON COLUMNS
FROM [Model]
)
WHERE
(
{[date].[date].&[2020-05-10] : [date].[date].&[2020-05-25]},
{[B].[End].&[2020-05-25]:NULL},
[A].[Product].&[ASDF]
)
Результат, который я получал, выглядел следующим образом:
A.id | A.Name | A.Owner | Count
----------------------------------------
1 | A | asdf | (null)
2 | B | asdf | 23
3 | C | asdd | (null)
4 | D | asdf | (null)
5 | E | qwer | 5067
6 | F | adfd | (null)
7 | G | wert | (null)
... | ... | .... | ...
25 | Y | werd | (null)
Как вы можете видеть, в данных много нулей.
Теперь у меня есть дополнительное требование для фильтрации только «Включенных» элементов иерархии B.id. Поэтому в предложении WHERE
я добавил следующую строку: [B].[Status].&[Enabled]
. Это не повлияло на мой вывод, но я знаю, что это должно быть, потому что мне нужно составить таблицу, которую мне нужно смоделировать в PowerBI, и это условие исключает несколько членов из иерархии A.id.
Новый вывод должен выглядеть примерно так это:
A.id | A.Name | A.Owner | Count
----------------------------------------
2 | B | asdf | 23
4 | D | asdf | (null)
5 | E | qwer | 5067
7 | G | wert | (null)
... | ... | .... | ...
25 | Y | werd | (null)
Как видите, некоторые значения NULL должны все еще присутствовать, потому что им сопоставлены элементы B.Id "Enabled".
Затем я попытался добавить [B].[id].[id].MEMBERS
и [B].[Status].[Status].MEMBERS
в строки, чтобы увидеть, какова взаимосвязь и почему некоторые члены A.id не удаляются. Я сделал это следующим образом:
(
[A].[Id].[Id].MEMBERS,
FILTER
(
[A].[Name].[Name].MEMBERS,
LEFT([A].[Name].CURRENTMEMBER.NAME, 4) <> "test"
),
[A].[Start].[Start].MEMBERS,
[A].[Owner].[Owner].MEMBERS,
[B].[id].[id].MEMBERS,
[B].[Status].[Status].MEMBERS
)
ON ROWS
Но это показало, что каждый член A сопоставлен с каждым отдельным членом B. По сути, это перекрестное соединение. Это не то, что мне нужно. Как я уже упоминал, в B есть уникальные элементы, которые сопоставляются с одним элементом в A. Я много гуглил и наткнулся на функцию LINKMEMBER (), но она, похоже, не работает для той реализации, которая мне нужна. Любая помощь или совет приветствуются.
Текущий запрос, который я выполняю, приведен ниже. Я попытался добавить закомментированный [B].[Status].&[Enabled]
как к предложению WHERE
, так и к ON ROWS
, но он давал мне те же результаты, что и всегда. Я также пытался использовать функцию FILTER
и фильтр только для [B].[Status].CURRENTMEMBER.NAME = "Enabled"
, но в результате получилась пустая таблица без вывода.
SELECT
(
[Measures].[Count]
)
ON COLUMNS,
ORDER(
(
--[B].[Status].&[Enabled],
[A].[Id].Children,
FILTER
(
[A].[Name].Children,
LEFT([A].[Name].CURRENTMEMBER.NAME, 4) <> "test"
),
[A].[Start].Children,
[A].[Owner].Children
),
[A].[Start].CurrentMember.Member_Key,
BASC
)
ON ROWS
FROM
(
SELECT
(
{[A].[Start].&[2020-05-21] : [A].[Start].&[2020-05-27]}
)
ON COLUMNS
FROM [Model]
)
WHERE
(
{[date].[date].&[2020-05-21] : [date].[date].&[2020-05-27]},
--[B].[Status].&[Enabled],
[A].[Product].&[ASDF]
)
Я новичок в MDX, поэтому приношу свои извинения за подробное объяснение.