DAX:如何在 SSAS 表格模型中实现 CREATE MEMBER MDX 函数
DAX: How to implement CREATE MEMBER MDX function in SSAS Tabular Model
我的任务是将现有的 MDX 度量(从多维模型)转换为 DAX(表格模型)。在此任务期间,我发现在 DAX 中没有像在 MDX 中那样使用 "CREATE MEMBER" 选项的功能。但是我有一些成员是通过这个函数在这个多维数据集内创建的(不在 DWH 中)。在这种情况下,我试图找出如何在表格模型 (DAX)
中执行相同(等效)操作
我现在正在替换一部分代码:
CREATE MEMBER CURRENTCUBE.[Condition].[Condition].[All].[NEW+USED]
AS [Condition].[Condition Type].[NEW]+[Condition].[Condition Type].[USED]
图片:
有一个来自 DWH 的 [Condition] table 的例子:
我有一个想法基于此 table 使用 UNION 创建一个 VIEW 以在此 VIEW 中添加一个新行 "NEW+USED" ,然后在多维数据集内使用 SWITCH(DAX 函数)进行所有测量
例如:
NVC:=
VAR GALC = [ABC] + [CDE]
RETURN SWITCH(
SELECTEDVALUE('Condition'[ConditionTotal]);
"ConditionTotal"; GALC;
"NEW+USED"; CALCULATE(
GALC;
FILTER(ALL('Condition'[ConditionDescription]); 'Condition'[ConditionDescription] = "New" && 'Condition'[ConditionDescription] = "Used")
)
)
但我不确定这是否正确,因为在这种情况下,我应该填充 table 中的所有列,其中一些列用于与多维数据集中的事实 tables 的关系.
目前我找到的唯一一个好的解决方案大体上是这样的:
- 在您的数据库中创建一个新的数据库对象(例如 VIEW),其中包含重复出现的成员的完整列表(这样成员将在数据库端而不是 SSAS 上创建)。
- 创建度量并在您的度量中为这些成员添加额外的逻辑。
测量示例:
My_measure:=
VAR New_var = CALC(SUM('FactTable'[Price]), 'Condition'[ConditionDescription] = "New")
VAR Used_var = CALC(SUM('FactTable'[Price]), 'Condition'[ConditionDescription] = "Used")
VAR New_and_Used_var = CALC(SUM('FactTable'[Price]), ALL('Condition'), 'Condition'[ConditionDescription] in {"New","Used"})
RETURN
SWITCH (SELECTEDVALUE('Condition'[ConditionDescription]),
"New", New_var,
"Used",Used_var,
"New + Used", New_and_Used_var
)
我另外做的唯一一件事是我在我的 "FactTable" 和这个新数据库对象 (View) 之间引用了 INACTIVE(引用 window 中未选中的 "Active" 标志)因为它无法正确使用此标志。
我的任务是将现有的 MDX 度量(从多维模型)转换为 DAX(表格模型)。在此任务期间,我发现在 DAX 中没有像在 MDX 中那样使用 "CREATE MEMBER" 选项的功能。但是我有一些成员是通过这个函数在这个多维数据集内创建的(不在 DWH 中)。在这种情况下,我试图找出如何在表格模型 (DAX)
中执行相同(等效)操作我现在正在替换一部分代码:
CREATE MEMBER CURRENTCUBE.[Condition].[Condition].[All].[NEW+USED]
AS [Condition].[Condition Type].[NEW]+[Condition].[Condition Type].[USED]
图片:
有一个来自 DWH 的 [Condition] table 的例子:
我有一个想法基于此 table 使用 UNION 创建一个 VIEW 以在此 VIEW 中添加一个新行 "NEW+USED" ,然后在多维数据集内使用 SWITCH(DAX 函数)进行所有测量
例如:
NVC:=
VAR GALC = [ABC] + [CDE]
RETURN SWITCH(
SELECTEDVALUE('Condition'[ConditionTotal]);
"ConditionTotal"; GALC;
"NEW+USED"; CALCULATE(
GALC;
FILTER(ALL('Condition'[ConditionDescription]); 'Condition'[ConditionDescription] = "New" && 'Condition'[ConditionDescription] = "Used")
)
)
但我不确定这是否正确,因为在这种情况下,我应该填充 table 中的所有列,其中一些列用于与多维数据集中的事实 tables 的关系.
目前我找到的唯一一个好的解决方案大体上是这样的:
- 在您的数据库中创建一个新的数据库对象(例如 VIEW),其中包含重复出现的成员的完整列表(这样成员将在数据库端而不是 SSAS 上创建)。
- 创建度量并在您的度量中为这些成员添加额外的逻辑。
测量示例:
My_measure:=
VAR New_var = CALC(SUM('FactTable'[Price]), 'Condition'[ConditionDescription] = "New")
VAR Used_var = CALC(SUM('FactTable'[Price]), 'Condition'[ConditionDescription] = "Used")
VAR New_and_Used_var = CALC(SUM('FactTable'[Price]), ALL('Condition'), 'Condition'[ConditionDescription] in {"New","Used"})
RETURN
SWITCH (SELECTEDVALUE('Condition'[ConditionDescription]),
"New", New_var,
"Used",Used_var,
"New + Used", New_and_Used_var
)
我另外做的唯一一件事是我在我的 "FactTable" 和这个新数据库对象 (View) 之间引用了 INACTIVE(引用 window 中未选中的 "Active" 标志)因为它无法正确使用此标志。