将 Switch True() Dax 计算列转换为 M 查询自定义列
Convert Switch True() Dax calculated column to M query custom colum
我的计算列和要加入的多个表有问题。它没有正确过滤我的视觉效果。研究后建议在查询中使用自定义列,但我不知道从哪里开始将以下 DAX 转换为 M 查询。
overall =
VAR skills =
CALCULATETABLE (
VALUES ( tsr_skill[ts_skill] ),
ALLEXCEPT ( tsr_skill, tsr_skill[ts_tsr] )
)
RETURN
SWITCH (
TRUE (),
"JMSR" IN skills, "Senior",
"JMOV" IN skills, "Over",
"JMUN" IN skills, "Under",
"JMRH" IN skills, "RHT",
"MNT"
)
查询中的数据结构:
我希望数据如何显示在查询中而不是显示为计算列。
首选输出:
根据您的解释,以及您在 DAX 公式中指定的级别,似乎所有级别都应指定为“低于”。
在您的“首选输出”中,您确实显示 JMXX
被分配为“结束”,但该 tsr 不包括 JMOV
技能
如果您的书面解释是正确的,并且根据发布的数据您的首选输出屏幕截图不正确,那么,在 PQ 中您可以
- 分组依据
tsr
- 根据包含 DAX 公式中列出的一项技能,创建返回“总体”的自定义聚合。
如果不是这种情况,请说明您如何将“Over”分配给 JMXX
。
编辑:M代码简化
M码
let
//Source = the data structure you show
Source = Excel.CurrentWorkbook(){[Name="Table13"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ts_tsr", type text}, {"ts_skill", type text}}),
//Group rows by tsr, then check if it has one of the defined skills
//If so, return the appropriate ranking.
#"Grouped Rows" = Table.Group(#"Changed Type", {"ts_tsr"}, {
{"ALL", each _, type table [ts_tsr=nullable text, ts_skill=nullable text]},
{"overall", each if List.Contains([ts_skill],"JMSR") then "Senior"
else if List.Contains([ts_skill],"JMOV") then "Over"
else if List.Contains([ts_skill],"JMUN") then "Under"
else if List.Contains([ts_skill],"JMRH") >=0 then "RHT"
else "MNT"}
}),
//Then re-expand the table
#"Expanded ALL" = Table.ExpandTableColumn(#"Grouped Rows", "ALL", {"ts_skill"}, {"ts_skill"})
in
#"Expanded ALL"
数据
输出
我的计算列和要加入的多个表有问题。它没有正确过滤我的视觉效果。研究后建议在查询中使用自定义列,但我不知道从哪里开始将以下 DAX 转换为 M 查询。
overall =
VAR skills =
CALCULATETABLE (
VALUES ( tsr_skill[ts_skill] ),
ALLEXCEPT ( tsr_skill, tsr_skill[ts_tsr] )
)
RETURN
SWITCH (
TRUE (),
"JMSR" IN skills, "Senior",
"JMOV" IN skills, "Over",
"JMUN" IN skills, "Under",
"JMRH" IN skills, "RHT",
"MNT"
)
查询中的数据结构:
我希望数据如何显示在查询中而不是显示为计算列。
首选输出:
根据您的解释,以及您在 DAX 公式中指定的级别,似乎所有级别都应指定为“低于”。
在您的“首选输出”中,您确实显示 JMXX
被分配为“结束”,但该 tsr 不包括 JMOV
技能
如果您的书面解释是正确的,并且根据发布的数据您的首选输出屏幕截图不正确,那么,在 PQ 中您可以
- 分组依据
tsr
- 根据包含 DAX 公式中列出的一项技能,创建返回“总体”的自定义聚合。
如果不是这种情况,请说明您如何将“Over”分配给 JMXX
。
编辑:M代码简化
M码
let
//Source = the data structure you show
Source = Excel.CurrentWorkbook(){[Name="Table13"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ts_tsr", type text}, {"ts_skill", type text}}),
//Group rows by tsr, then check if it has one of the defined skills
//If so, return the appropriate ranking.
#"Grouped Rows" = Table.Group(#"Changed Type", {"ts_tsr"}, {
{"ALL", each _, type table [ts_tsr=nullable text, ts_skill=nullable text]},
{"overall", each if List.Contains([ts_skill],"JMSR") then "Senior"
else if List.Contains([ts_skill],"JMOV") then "Over"
else if List.Contains([ts_skill],"JMUN") then "Under"
else if List.Contains([ts_skill],"JMRH") >=0 then "RHT"
else "MNT"}
}),
//Then re-expand the table
#"Expanded ALL" = Table.ExpandTableColumn(#"Grouped Rows", "ALL", {"ts_skill"}, {"ts_skill"})
in
#"Expanded ALL"
数据
输出