将 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"

数据

输出