我是MDX查询和处理多维数据的新手,虽然一个项目需要我学习。
我们有一个带有KPI的多维数据集,它执行Lag()
,根据日期总结满足要求的交易数量。
查询类似于
SELECT
{} on 0,
[Transaction].[Trader].Members HAVING
KPIStatus("REQ") < 0 on 1
FROM
[Cube]
WHERE
[Transaction].[Trade Date].[2014-07-02]
这将输出所有符合KPI标准的交易者。
由此,我想在上述查询的结果中为交易者选择所有[Transaction].[Trade ID]
。我只希望[Transaction].[Trade ID]
与之前的日期范围相同,因为它们是触发KPIGoal
的一部分。
我尝试过像
这样的事情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。这可能是因为我的计算机上的RAM太低而SSMS吃掉了,但有没有比上面的例子更好的执行查询的方法?此外,我认为这会导致结果严重不良。交易者可以拥有许多具有独特[Transaction].[Trade ID]
的交易。什么可能是一个更好的方法呢?
奖金问题:
将结果作为行/列&#34; headears&#34;有什么区别?而不是价值观。 第一个查询给我一列结果为&#34; header&#34;例如如何封装以下类别。它究竟意味着什么?
答案 0 :(得分:1)
只需在行上使用交叉产品即可。分析服务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]
我不确定您的KPI是如何构建的,以及它是否会受到行中其他层次结构的影响。如果是这种情况,您也可以使用Filter
:
SELECT
{} on 0,
Filter([Transaction].[Trader].Members, KPIStatus("REQ") < 0)
*
[Transaction].[Trade ID].Members
on 1
FROM
[Cube]
WHERE
[Transaction].[Trade Date].[2014-07-02]
关于您的红利问题: MDX查询可以包含零个,一个,两个甚至更多的轴,这些轴构建标头并跨越结果单元格的单元格空间(通常为数字)。每个轴可以具有零个,一个,两个或更多层次结构,从中可以获取标签的成员名称。如果你e。 G。在行轴上有三个层次结构,每行有三个标题条目,它们是三个层次结构的成员。大多数报告使用两个维度。如果您使用两个以上的轴,SQL Server Management Studio会抱怨,因为它不知道如何显示结果,但这不是MDX的限制。
在第一个查询中,您声明要在列上具有零层次结构,因为将空集置于轴编号零(即列轴)上。然后在行(轴编号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]
当然,您可以使用计算成员做更多事情,与物理测量相比,它可以是字符串而不仅仅是数字,但这将是另一个问题。