【发布时间】:2020-05-26 20:50:24
【问题描述】:
我有 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)
如您所见,一些空值应该仍然存在,因为它们具有映射到它们的“已启用”B.Id 成员。
然后我尝试在行上添加[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 还很陌生,所以我很抱歉进行了广泛的解释。
【问题讨论】: