首页 > 解决方案 > SQL Server MDX 查询:使用 CROSSJOIN 和过滤器 = 0 分钟的所有成员帐户和成员电子邮件

问题描述

我是 SQL Server 的新手,正在尝试获取一个查询以显示所有 [Mins] 字段具有(空)值的 [Email](即用户的电子邮件地址)的成员,并且我还想要一列用户的[帐户名称](即他们工作的公司)。

让查询以“.Members”结尾的 [Account Name] 运行是我失败的地方。所有这三个字段都在不同的表上,我正在使用 CROSSJOIN 和 FILTER 的组合。

我不确定查询是否不会运行,因为:

  1. 我使用 .Members 不正确,因为我同时使用 [Email] 和 [Account Name],或者
  2. 我们有某种记忆问题(这不是第一次!)。

我是 SQL 新手,在 StackOverFlow 上找到了针对部分问题的不同解决方案,可以成功地将以下代码拼凑在一起,但我无法通过在“[Account Name]”之后添加“.Members”来拼凑它 查询运行但几分钟后它会耗尽内存。

如果我在“[Account Name]”之后不包含“.Members”,则查询会在大约 17 秒后成功运行;但是,它只显示帐户名称的“全部”,而不显示帐户。我只想在电子邮件旁边显示帐户!

'''
SELECT
    [Measures].[Sum of Mins]
        ON COLUMNS,
    CROSSJOIN(
        [vw_AccountData].[Account Name].Members,
            Filter (
                    [vw_UserData].[Email].Members,
                    [Measures].[Sum of Mins] = 0
                     ))
         ON ROWS
FROM [Model]  
'''

预期/实际结果

标签: sql-serverssasmdx

解决方案


我的理解是,对于此度量 [Measures].[Sum of Mins,您需要他们的电子邮件 ID 和帐户名的空值或零值的用户。我假设您的多维数据集中有一个度量 [Measures].[Sum of Mins] 和维度属性 [vw_AccountData].[Account Name] 和 [vw_UserData].[Email]

Select 
[Measures].[Sum of Mins]
ON COLUMNS,
filter 
(
([vw_AccountData].[Account Name].[Account Name],[vw_UserData].[Email].[Email]),
[Measures].[Sum of Mins] = 0
)
on rows
from 
[Model]

推荐阅读