基于维度字段和度量字段的 MDX 过滤器未返回预期结果
MDX Filter based on a Dimension field and Measure field not returning expected result
我正在使用 SSAS 2019 并使用以下 MDX 查询来确定数据错误 - 即在这种情况下,给定分数 ([Measures].[Score]) 高于最大分数 ([PerformanceLevel]。 [MaxScore]) 是
SELECT NON EMPTY {
[Measures].[FactTestScoreCount]
} ON COLUMNS,
NON EMPTY
{(
[TestEvent].[Key].[Key].Members
)} ON ROWS
FROM [TestScore]
WHERE
(
FILTER(
[PerformanceLevel].[MaxScore].[MaxScore].Members,
[PerformanceLevel].[MaxScore].CurrentMember.MemberValue < [Measures].[Score]
)
)
...您会注意到它使用度量值与过滤器中的维度值进行比较
但是上面的查询不正确 return 所有行(它应该 return 零行,因为我们在当前数据库中没有高于最大分数的分数)
我尝试过使用 HAVING 并尝试将过滤器添加到 FROM 中,但是我得到了相同的结果。我还尝试在表达式的两边将数据类型转换为 int 但无济于事。我尝试暂时将条件更改为硬编码(数字)值,这似乎缩小了问题范围,因为 FILTER 中的 [Measures].[Score] - 即据我所知,将 Measure 放在 FILTER 中不会似乎没有按预期工作,但我不知道为什么
任何想法将不胜感激
我没有完全理解 Filter 函数的第一个参数表示什么 - 特别是粒度,否则它(取决于您的聚合类型将对度量求和)。此外,当 joining/displaying 行时,将过滤器向上移动到 select 允许更大的灵活性 - 所以我想出了下面的效果很好
SELECT NON EMPTY {
[Measures].[FactTestScoreCount]
} ON COLUMNS,
Filter(
NonEmpty(
{(
[TestEvent].[Key].[Key].members
)}
), [Measures].[Score] > [PerformanceLevel.[MaxScore].CurrentMember.MemberValue
) ON ROWS
FROM [TestScore]
我正在使用 SSAS 2019 并使用以下 MDX 查询来确定数据错误 - 即在这种情况下,给定分数 ([Measures].[Score]) 高于最大分数 ([PerformanceLevel]。 [MaxScore]) 是
SELECT NON EMPTY {
[Measures].[FactTestScoreCount]
} ON COLUMNS,
NON EMPTY
{(
[TestEvent].[Key].[Key].Members
)} ON ROWS
FROM [TestScore]
WHERE
(
FILTER(
[PerformanceLevel].[MaxScore].[MaxScore].Members,
[PerformanceLevel].[MaxScore].CurrentMember.MemberValue < [Measures].[Score]
)
)
...您会注意到它使用度量值与过滤器中的维度值进行比较
但是上面的查询不正确 return 所有行(它应该 return 零行,因为我们在当前数据库中没有高于最大分数的分数)
我尝试过使用 HAVING 并尝试将过滤器添加到 FROM 中,但是我得到了相同的结果。我还尝试在表达式的两边将数据类型转换为 int 但无济于事。我尝试暂时将条件更改为硬编码(数字)值,这似乎缩小了问题范围,因为 FILTER 中的 [Measures].[Score] - 即据我所知,将 Measure 放在 FILTER 中不会似乎没有按预期工作,但我不知道为什么
任何想法将不胜感激
我没有完全理解 Filter 函数的第一个参数表示什么 - 特别是粒度,否则它(取决于您的聚合类型将对度量求和)。此外,当 joining/displaying 行时,将过滤器向上移动到 select 允许更大的灵活性 - 所以我想出了下面的效果很好
SELECT NON EMPTY {
[Measures].[FactTestScoreCount]
} ON COLUMNS,
Filter(
NonEmpty(
{(
[TestEvent].[Key].[Key].members
)}
), [Measures].[Score] > [PerformanceLevel.[MaxScore].CurrentMember.MemberValue
) ON ROWS
FROM [TestScore]