Ssas MDX有条件选择

Ssas MDX有条件选择,ssas,mdx,ssms,business-intelligence,Ssas,Mdx,Ssms,Business Intelligence,我不熟悉MDX查询和处理多维数据,尽管项目需要我学习 我们有一个带有KPI的多维数据集,它执行一个Lag(),根据日期汇总满足要求的事务数 查询类似于 SELECT {} on 0, [Transaction].[Trader].Members HAVING KPIStatus("REQ") < 0 on 1 FROM [Cube] WHERE [Transaction].[Trade Date].[2014-07-02] SELECT [Transaction].[Trader].&a

我不熟悉MDX查询和处理多维数据,尽管项目需要我学习

我们有一个带有KPI的多维数据集,它执行一个
Lag()
,根据日期汇总满足要求的事务数

查询类似于

SELECT
{} on 0,
[Transaction].[Trader].Members HAVING
KPIStatus("REQ") < 0 on 1
FROM
[Cube]
WHERE
[Transaction].[Trade Date].[2014-07-02]
SELECT
[Transaction].[Trader].&[trader_id] HAVING
KPIStatus("REQ") < 0 on 0,
[Transaction].[Trade ID].Members on 1
FROM
[Cube]
WHERE
[Transaction].[Trade Date].[2014-07-02]
但我得到了一个System.OutOfMemoryException。这可能是因为SSMS占用了我计算机上的低RAM,但是有没有比上面的示例更好的执行查询的方法?而且,我相信这会导致一个糟糕的结果。交易员可以有很多具有唯一
[Transaction].[Trade ID]
的交易。有什么更好的方法


奖金问题:

将结果作为行/列“headears”而不是值获取有什么区别。 第一个查询为我提供了一列,结果为“headers”,例如下面的类别是如何封装的。这到底是什么意思


只需在行上使用叉积即可。Analysis services
Autoexists
应注意只查看属于其交易员的交易ID,因为两个层次结构位于同一维度中:

SELECT
{} on 0,
[Transaction].[Trader].Members
*
[Transaction].[Trade ID].Members
HAVING KPIStatus("REQ") < 0 on 1
FROM
[Cube]
WHERE
[Transaction].[Trade Date].[2014-07-02]
关于您的奖金问题: MDX查询可以有零个、一个、两个或更多轴,这些轴用于构建标题并跨越结果单元格的单元格空间(通常为数字)。每个轴可以有零个、一个、两个或多个层次结构,标签的成员名称可以从这些层次结构中获取。如果你是e。G如果行轴上有三个层次结构,则每行上有三个标题条目,它们是三个层次结构的成员。大多数报告使用两个维度。如果使用两个以上的轴,SQLServerManagementStudio会抱怨,因为它不知道如何显示结果,但这不是MDX的限制

在第一个查询中,当您将空集放在轴号0(即列轴)上时,您声明希望列上的层次结构为零。然后在行上放置一个层次结构(轴编号1)。如果要将结果放入单元格中,可以使用以下计算方法:

WITH Member Measures.[Id as measure] AS
[Transaction].[Trade ID].CurrentMember.Name
SELECT
{ Measures.[Id as measure] } on 0,
Filter([Transaction].[Trader].Members, KPIStatus("REQ") < 0)
*
[Transaction].[Trade ID].Members
on 1
FROM
[Cube]
WHERE
[Transaction].[Trade Date].[2014-07-02]
具有成员度量值。[Id as measure]as
[交易].[交易ID].CurrentMember.Name
挑选
0上的{Measures.[Id as Measures]},
筛选器([Transaction].[Trader]。成员,KPIStatus(“请求”)<0)
*
[交易][Trade ID]。成员
在1号
从…起
[立方体]
哪里
【交易】【交易日期】【2014-07-02】

当然,您可以使用计算成员做更多的事情,与物理度量相比,计算成员可以是字符串,而不仅仅是数字,但这将是另一个问题。

谢谢您的解释性回答!最后我用了一个叉积,效果很好!
WITH Member Measures.[Id as measure] AS
[Transaction].[Trade ID].CurrentMember.Name
SELECT
{ Measures.[Id as measure] } on 0,
Filter([Transaction].[Trader].Members, KPIStatus("REQ") < 0)
*
[Transaction].[Trade ID].Members
on 1
FROM
[Cube]
WHERE
[Transaction].[Trade Date].[2014-07-02]