DAX 服务召回率度量
DAX Service recall rate measure
我正在努力 write/calculate DAX 中的这个度量。召回率的定义是在一周内(Closed on date, 7 days period)对客户、资产组合的重复服务预订计数(不同预订编号的计数,无论如何应该是不同的,但以防万一)。所以我出去修理一台机器,如果我在一周内再次被叫去为客户修理同一台机器,那就是召回 1 次(如果我在一周内被叫多次,则召回次数更多)。我用不同的颜色突出显示了这些组。需要过滤掉 Null Assets、Closed On 和 null booking number(这是通过下面代码中 SQL 中的内连接完成的,需要在 DAX 查询中)谢谢!编辑:抱歉,如果我发布 sql 代码来生成数据会更有帮助,请参见下文:
SELECT
FB.BookingNumber,
FB.EngineerEmployeeID,
FWO.ServiceAccountRecID AS Customer,
FWO.AssetRecID AS Asset,
FWO.ClosedOn
FROM dbo.FactWorkOrder AS FWO JOIN dbo.FactBooking AS FB ON FB.WorkOrderID = FWO.WorkOrderID
WHERE FWO.WorkOrderType = 'Breakdown'
AND AssetRecID IS NOT NULL
AND ClosedOn IS NOT NULL
ORDER BY BookingNumber
我会先创建一个“预订码”列:
Booking Key = [Customer] & "|" & [Asset] & "|" & WEEKNUM ( [ClosedOn] )
然后我会创建一个度量 return 预订密钥上修改后的非重复计数:
# Repeat Service Bookings =
VAR v_Count = DISTINCTCOUNT ( 'Table'[Booking Key] )
RETURN IF ( v_Count > 1, v_Count - 1 )
我会将 # Repeat Service Bookings 添加到您的 table 视觉对象的视觉级别过滤器中,过滤器设置为: 大于1.
如果您首先定义一个计算列,为每个 Customer
/Asset
组合提供第一个 CloseOn
日期,效率最高。
FirstClosed =
CALCULATE (
MIN ( WorkOrder[ClosedOn] ),
ALLEXCEPT ( WorkOrder, WorkOrder[Customer], WorkOrder[Asset] )
)
然后写一个度量
TotalRecalls =
COUNTROWS (
FILTER (
WorkOrder,
WorkOrder[ClosedOn] > WorkOrder[FirstClosed] &&
WorkOrder[ClosedOn] < WorkOrder[FirstClosed] + 7
)
)
但是,如果您愿意,您可以在一次测量中完成所有这些操作。
TotalRecalls =
VAR AddCol =
ADDCOLUMNS (
WorkOrder,
"@FirstClosed",
CALCULATE (
MIN ( WorkOrder[ClosedOn] ),
ALLEXCEPT ( WorkOrder, WorkOrder[Customer], WorkOrder[Asset] )
)
)
RETURN
COUNTROWS (
FILTER (
AddCol,
WorkOrder[ClosedOn] > [@FirstClosed] &&
WorkOrder[ClosedOn] < [@FirstClosed] + 7
)
)
无论哪种方式,这都是在视觉中使用的样子:
我正在努力 write/calculate DAX 中的这个度量。召回率的定义是在一周内(Closed on date, 7 days period)对客户、资产组合的重复服务预订计数(不同预订编号的计数,无论如何应该是不同的,但以防万一)。所以我出去修理一台机器,如果我在一周内再次被叫去为客户修理同一台机器,那就是召回 1 次(如果我在一周内被叫多次,则召回次数更多)。我用不同的颜色突出显示了这些组。需要过滤掉 Null Assets、Closed On 和 null booking number(这是通过下面代码中 SQL 中的内连接完成的,需要在 DAX 查询中)谢谢!编辑:抱歉,如果我发布 sql 代码来生成数据会更有帮助,请参见下文:
SELECT
FB.BookingNumber,
FB.EngineerEmployeeID,
FWO.ServiceAccountRecID AS Customer,
FWO.AssetRecID AS Asset,
FWO.ClosedOn
FROM dbo.FactWorkOrder AS FWO JOIN dbo.FactBooking AS FB ON FB.WorkOrderID = FWO.WorkOrderID
WHERE FWO.WorkOrderType = 'Breakdown'
AND AssetRecID IS NOT NULL
AND ClosedOn IS NOT NULL
ORDER BY BookingNumber
我会先创建一个“预订码”列:
Booking Key = [Customer] & "|" & [Asset] & "|" & WEEKNUM ( [ClosedOn] )
然后我会创建一个度量 return 预订密钥上修改后的非重复计数:
# Repeat Service Bookings =
VAR v_Count = DISTINCTCOUNT ( 'Table'[Booking Key] )
RETURN IF ( v_Count > 1, v_Count - 1 )
我会将 # Repeat Service Bookings 添加到您的 table 视觉对象的视觉级别过滤器中,过滤器设置为: 大于1.
如果您首先定义一个计算列,为每个 Customer
/Asset
组合提供第一个 CloseOn
日期,效率最高。
FirstClosed =
CALCULATE (
MIN ( WorkOrder[ClosedOn] ),
ALLEXCEPT ( WorkOrder, WorkOrder[Customer], WorkOrder[Asset] )
)
然后写一个度量
TotalRecalls =
COUNTROWS (
FILTER (
WorkOrder,
WorkOrder[ClosedOn] > WorkOrder[FirstClosed] &&
WorkOrder[ClosedOn] < WorkOrder[FirstClosed] + 7
)
)
但是,如果您愿意,您可以在一次测量中完成所有这些操作。
TotalRecalls =
VAR AddCol =
ADDCOLUMNS (
WorkOrder,
"@FirstClosed",
CALCULATE (
MIN ( WorkOrder[ClosedOn] ),
ALLEXCEPT ( WorkOrder, WorkOrder[Customer], WorkOrder[Asset] )
)
)
RETURN
COUNTROWS (
FILTER (
AddCol,
WorkOrder[ClosedOn] > [@FirstClosed] &&
WorkOrder[ClosedOn] < [@FirstClosed] + 7
)
)
无论哪种方式,这都是在视觉中使用的样子: