我正在尝试开发DAX计算的列,这些列指示教练分配随时间的变化。我是Power BI和DAX的新手。以下是事实表的示例。现在,我正在查看一位培训师(马里奥),并根据访问日期和培训师列来比较人员是否仍分配给他,是否已被新分配或是否已将其删除。
我将创建一个仪表板,但在最简单的视图中,我希望输出是这样的(以及最近的访问日期):
如果上次访问日期列出了其他培训者,现在又列出了Mario,或者这是第一次访问,则为“新分配”;如果最近两次访问都是与Mario进行的,则为“仍分配”,并且“分配已删除” “如果列出了另一位教练在马里奥之后访问。
在搜索在线论坛后,我认为这类似于随时可用的退货/丢失客户度量,但是我需要在行级别输出,因此我认为我需要使用计算列。根据这些搜索,我创建了一个列,如果Mario是培训师,则该列输出1,并尝试在另一列无效的列中使用MIN / MAX。
这是工作的计算列:
Mario =
VAR IfMario = CALCULATE (
FIRSTNONBLANK( fact[Trainer], 1),
FILTER( ALL (fact[ID]), fact[ID] = "Mario" )
)
RETURN
SWITCH (
TRUE(),
IfMario = "Mario", 1,
0
)
我不确定如何从这里继续。谢谢您的帮助!
答案 0 :(得分:2)
要创建这样的视图,您不需要计算列(除非您有其他未在问题中提及的原因)。措施将更容易建立。
措施1:
Last Visit Date = MAX(fact[Date])
措施2:
Current Trainer =
VAR Current_Date = [Last Visit Date]
RETURN
CALCULATE ( VALUES ( fact[Trainer] ), fact[Date] = Current_Date )
措施3:
Previous Trainer =
VAR Current_Date = [Last Visit Date]
VAR Previous_Date = CALCULATE ( MAX ( fact[Date] ), fact[Date] < Current_Date )
RETURN
CALCULATE ( VALUES ( fact[Trainer] ), fact[Date] = Previous_Date )
措施4:
Category =
SWITCH (
TRUE (),
[Current Trainer] = "Mario" && [Previous Trainer] = "Mario", "Still Assigned",
[Current Trainer] = "Mario" && [Previous Trainer] <> "Mario", "Newly Assigned",
[Current Trainer] <> "Mario" && [Previous Trainer] = "Mario", "Assignement Removed"
)
在矩阵行上放置名称,将小数点4和1放到值上,您将获得报告。
注意:
[编辑:防止多名教员出错]
如果您的客户在同一日期可能有多个培训师,那么VALUES将返回不止1个培训师,这会导致错误。可能的解决方案:
Current Trainer Count:=
VAR Current_Date = [Most Recent]
RETURN
COUNTROWS( CALCULATETABLE(Customer, Customer[Date] = Current_Date ))
这种措施将返回每个客户当前的培训师数量。然后修改[当前客户]指标:
Current Trainer:=
VAR Current_Date = [Most Recent]
RETURN
IF([Current Trainer Count] = 1,
CALCULATE( VALUES(Customer[Trainer]), Customer[Date] = Current_Date ),
"Multiple Trainers")
您可以返回所需的任何内容,而不是“ Multiple Trainers”文本。例如,您可以返回当前的教练人数:
Current Trainer:=VAR Current_Date = [Most Recent]
RETURN
IF([Current Trainer Count] = 1,
CALCULATE( VALUES(Customer[Trainer]), Customer[Date] = Current_Date ),
[Current Trainer Count] & " trainers" )
因此,度量将返回“ 2个培训员”,而不是“多个培训员”,等等。
另一种方法是将所有培训师连接到一个定界列表中。例如:
Current Trainer=
VAR Current_Date = [Most Recent]
RETURN
CONCATENATEX (
CALCULATETABLE ( Customer, Customer[Date] = Current_Date ),
Customer[Trainer], "," )
这种措施不需要保护,因为在有多名培训师的情况下,它只会简单列出所有内容:
Current Trainer
"Mario, Yoshi"
当然,您也可以在报告中使用“当前培训师人数”来快速查看此类情况。
相同的逻辑适用于上一培训师。
最后,您需要保护您的[类别]措施免受多重培训师的影响。例如:
Status=
IF([Current Trainer Count] > 1 || [Previous Trainer Count] > 1, "Multiple Trainers",
SWITCH
(TRUE(),
[Current Trainer] = "Mario" && [Previous Trainer] = "Mario", "Same",
[Current Trainer] = "Mario" && [Previous Trainer] <> "Mario","New",
[Current Trainer] <> "Mario" && [Previous Trainer] = "Mario", "Lost"
))