Mdx 蒙德里安的情况如何
MDX查询以查找工资超过5000英镑的员工Mdx 蒙德里安的情况如何,mdx,olap,mondrian,Mdx,Olap,Mondrian,MDX查询以查找工资超过5000英镑的员工 select { [Measures].[Total Employee], [Measures].[Total Salary] } on columns, NON EMPTY { ( [Department].[All Department], [Position].[All Position], [Employee].[All Employee])
select
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} on columns,
NON EMPTY
{
(
[Department].[All Department],
[Position].[All Position],
[Employee].[All Employee])
} on rows
from Salary
where
[Measures].[Total Salary]>5000
我的模式
我知道如果您来自
slq
看起来不错,但以下是错误的:
WHERE
[Measures].[Total Salary]>5000
您可以在SELECT
子句中使用filter函数:
SELECT
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} ON COLUMNS,
NON EMPTY
{
(
[Department].[All Department],
[Position].[All Position]
)
} ON ROWS
FROM [Salary]
WHERE FILTER(
[Employee].[All Employee].CHILDREN,
[Measures].[Total Salary]>5000
);
以上内容将过滤总工资始终大于5000的员工
如果您喜欢以下内容,筛选器可以遍历整个交叉集,但您将得到返回的所有相应员工的列表:
SELECT
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} ON COLUMNS,
NON EMPTY
FILTER(
{
(
[Department].[All Department],
[Position].[All Position],
[Employee].[All Employee].CHILDREN
)
}
,[Measures].[Total Salary]>5000
) ON ROWS
FROM [Salary];
或者在整个集合中使用HAVING
子句-尽管这在逻辑上与上述不同:
SELECT
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} ON COLUMNS,
NON EMPTY
[Department].[All Department]
* [Position].[All Position],
* [Employee].[All Employee].CHILDREN
HAVING [Measures].[Total Salary]>5000 ON ROWS
FROM [Salary];
编辑 如果仍需要行上的[All Employes]成员,则可以将筛选器移动到子多维数据集:
SELECT
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} ON COLUMNS,
NON EMPTY
[Department].[All Department]
*[Position].[All Position]
*[Employee].[All Employee]
ON ROWS
FROM
(
SELECT
FILTER(
[Employee].[All Employee].CHILDREN,
[Measures].[Total Salary]>5000
) ON 0
FROM [Salary]
);
我猜您遇到了空间/内存问题。如果是,您可以尝试以下代码:
select
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} on columns,
NON EMPTY
{
NonEmpty(
(
[Department].[All Department] *
[Position].[All Position] *
[Employee].[All Employee]
)
,[Measures].[Total Salary]
)
} having [Measures].[Total Salary] > 5000 on rows
from Salary
NonEmpty
函数将在交叉连接时删除空元组
编辑1
现在呢
with member [Measures].SalGrtrThan5000
as
IIF
(
[Measures].[Total Salary] > 5000,
1,
NULL
)
select
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} on columns,
NON EMPTY
{
NonEmpty(
(
[Department].[All Department] *
[Position].[All Position] *
[Employee].[All Employee]
)
,[Measures].SalGrtrThan5000
)
}
on rows
from Salary
编辑,使用EXISTS
select
{
[Measures].[Total Employee],
[Measures].[Total Salary]
} on columns,
NON EMPTY
{
FILTER
(
EXISTS (
(
[Department].[All Department] *
[Position].[All Position] *
[Employee].[All Employee]
)
, , "SomeMeasureGroup"
) //EXISTS will remove non-empty tuples this way
, [Measures].[Total Salary] > 5000
)//Filters the set
}
on rows
from Salary
用
[Measures].[Total Salary]
所属的度量值组的实际名称替换“SomeMeasureGroup”。有一个逐单元的过滤器,但使用存在
,希望这次会更快。Mondrian错误:多个函数与签名“.MEMBERS”匹配;它们是:.Members,.Members在执行1和2查询时出现以下错误请帮助我?@devendrasingh我将编辑我的脚本,因为我稍微误解了您的要求hanks@whytheq。但它不会在行上显示员工总数。首先查询并花费大量时间加载结果。@devendrasingh是否尝试将全部员工成员添加到行中?它应该抛出一个错误-这是因为我们已经在WHERE
子句中使用了它。有很多方法可以解决这个问题-我将添加一个编辑。请帮助任何人……即使sub-select(你称之为subquery)在Mondrian中不起作用,你也有两个完全有效的解决方案。问题是什么?Thnaks@Sourav。但仍然显示---Mondrian错误:第16行第7列的语法错误,标记“having”我们不能在层次结构[所有部门]、[所有职位]、[所有员工]----显示Mondrian错误:多个函数匹配签名“.members”;它们是:.Members、.Members------确定,然后删除成员
并重试.members
可以很好地使用SSA。我以前没有在Mondrian上工作过。现在展示一下------Mondrian错误:没有函数匹配签名“NonEmpty(,)”-----Mondrian中没有NonEmpty
!谢天谢地,我不在蒙德里安工作!!;)