如何在 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] )
我正在尝试将 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] )