如何在 SSAS MDX Cube 中使用等价的 SQL with sub query 和 where 子句来创建度量?

How to use the equivalent SQL with sub query and where clause in SSAS MDX Cube to create a measure?

我正在尝试将 SQL 查询“转换”为 SSAS MDX 表达式,以在 SSAS 多维存在立方体中创建度量。

在 SQL 我有下面的 table:

产品 产品代码 运营商姓名 步骤 步进序列 StepDate StepTimeinDays
椅子 Black_Chair 约瑟夫·史密斯 0_Start 0 2019 年 2 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 1_Material 1 2019 年 2 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 2_Saw 2 2019 年 2 月 5 日 1
椅子 Black_Chair 约瑟夫·史密斯 3_Build 3 2019 年 3 月 5 日 1
椅子 Black_Chair 约瑟夫·史密斯 4_Paint 4 2019 年 4 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 5_Varnish 5 2019 年 4 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 6_Packing 6 2019 年 4 月 5 日 1
Table Table_2350 李四 0_Start 0 2019 年 2 月 5 日 0
Table Table_2350 李四 1_Material 1 2019 年 2 月 5 日 0
Table Table_2350 李四 3_Build 3 2019 年 2 月 5 日 0
Table Table_2350 李四 4_Paint 4 2019 年 2 月 5 日 0
Table Table_2350 李四 5_Varnish 5 2019 年 2 月 5 日 1
Table Table_2350 李四 6_Packing 6 2019 年 3 月 5 日 1
椅子 Black_Chair 约瑟夫·多伊 0_Start 0 2019 年 3 月 5 日 0
椅子 Black_Chair 约瑟夫·多伊 1_Material 1 2019 年 3 月 5 日 1
椅子 Black_Chair 约瑟夫·多伊 2_Saw 2 2019 年 4 月 5 日 0
椅子 Black_Chair 约瑟夫·多伊 3_Build 3 2019 年 4 月 5 日 1
椅子 Black_Chair 约瑟夫·多伊 4_Paint 4 2019 年 5 月 5 日 1
椅子 Yellow_Chair 约瑟夫·史密斯 0_Start 0 2019 年 4 月 5 日 0
椅子 Yellow_Chair 约瑟夫·史密斯 1_Material 1 2019 年 4 月 5 日 1
椅子 Yellow_Chair 约瑟夫·史密斯 3_Build 3 2019 年 5 月 5 日 0
椅子 Yellow_Chair 约瑟夫·史密斯 4_Paint 4 2019 年 5 月 5 日 1
椅子 Black_Chair 李四 0_Start 0 2019 年 4 月 5 日 0
椅子 Black_Chair 李四 1_Material 1 2019 年 4 月 5 日 1
椅子 Black_Chair 李四 3_Build 3 2019 年 5 月 5 日 0
椅子 Black_Chair 李四 4_Paint 4 2019 年 5 月 5 日 1

在 SQL 运行 中的查询(由 Dale 在其他特定于 SQL 的问题中提供)如下:

select Step
    , sum(StepTimeinDays) as SumofStepTimeinDays
from dbo.build_process t1
where exists (
    select 1
    from dbo.build_process t2
    where t1.ProductCode = t2.ProductCode and t1.OperatorName = t2.OperatorName
    and t2.Step = '2_Saw'
)
group by Step
order by Step asc;

return 过滤 table 仅包含“2_Saw”:

产品 产品代码 运营商姓名 步骤 步进序列 StepDate StepTimeinDays
椅子 Black_Chair 约瑟夫·史密斯 0_Start 0 2019 年 2 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 1_Material 1 2019 年 2 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 2_Saw 2 2019 年 2 月 5 日 1
椅子 Black_Chair 约瑟夫·史密斯 3_Build 3 2019 年 3 月 5 日 1
椅子 Black_Chair 约瑟夫·史密斯 4_Paint 4 2019 年 4 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 5_Varnish 5 2019 年 4 月 5 日 0
椅子 Black_Chair 约瑟夫·史密斯 6_Packing 6 2019 年 4 月 5 日 1
椅子 Black_Chair 约瑟夫·多伊 0_Start 0 2019 年 3 月 5 日 0
椅子 Black_Chair 约瑟夫·多伊 1_Material 1 2019 年 3 月 5 日 1
椅子 Black_Chair 约瑟夫·多伊 2_Saw 2 2019 年 4 月 5 日 0
椅子 Black_Chair 约瑟夫·多伊 3_Build 3 2019 年 4 月 5 日 1
椅子 Black_Chair 约瑟夫·多伊 4_Paint 4 2019 年 5 月 5 日 1

此 SQL 查询的最终结果是(这与我需要在 SSAS 多维数据集中获得的结果相同):

步骤 StepTime 天数总和
0_Start 0
1_Material 1
2_Saw 1
3_Build 2
4_Paint 1
5_Varnish 0
6_Packing 1

例如,对于总百分比度量,我使用了下面的表达式并且效果很好。

([Measures].[StepTimeinDays],[Process].[Step].CurrentMember)/([Measures].[StepTimeinDays],[Process].[Step].[All])

现在相同的“table”在 SSAS 多维多维数据集中,我试图在 SSAS 表达式字段中获得与 SQL 查询相同的结果以创建度量但没有成功。

我尝试使用 MDX 表达式,更接近的结果如下:

([Measures].[StepTimeinDays],[Process].[Step].[All],[Process].[Step].&[2_Saw])

但这是 returning 错误的值。其他具有父 returned 语法错误的表达式。

这已在另一个论坛中解决,但可以在没有花括号的情况下创建度量来获取数据集:

 sum ( NonEmpty ( [Product].[OperatorName].[OperatorName] * [Product].[ProductCode].[ProductCode], ([Measures].[StepTimeinDays], [Product].[Step].&[2_Saw]) ), [Measures].[StepTimeinDays] )