Mdx 蒙德里安的情况如何

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])

MDX查询以查找工资超过5000英镑的员工

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
!谢天谢地,我不在蒙德里安工作!!;)