基于月度维度的透视表最大值关联工单ID超链接实现需求
工单时长统计与超链接动态实现方案
需求背景
- 手里有按月份统计的工单数据集,包含各环节处理时长(单位:分钟)
- 已经用透视表做了月度统计:用透视表原生功能统计
Count of ID,自定义度量用=PERCENTILE.INC([DurationX],0.5)和=PERCENTILE.INC([DurationX],0.9)计算50分位、90分位时长,最大值用透视表原生的Max of Duration - 核心需求:
- 把月度时长最大值对应的工单ID做成超链接,而且筛选/切片操作不能搞坏其他时长列或月份字段
- RAWData表新增月度数据后,calc页的计算表要能自动更新
- 用带
IF(ISERROR)的REPLACE函数替换原来的&Right(xx,LEN(xx)-3),去掉ID里的“co/”,避免后续数据源变了还要批量改公式
现有问题
- 手动写的超链接公式
=HYPERLINK("https://someurl.com/"&RIGHT(RAWData!A9,LEN(RAWData!A9)-3),RAWData!B9)没法在透视表里跟着筛选/切片动态变 - 试了
INDEX+MATCH+MAXIFS公式(翻译后:=INDEX(RAW[ID],MATCH(MAXIFS(RAW[PreDetection],RAW[日期/时间(UTC)],">="&A3,RAW[日期/时间(UTC)],"<"&A14),RAW[PreDetection],0),A3:A14是格式化的月度日期),也没实现透视表内的动态适配
解决方案
一、透视表内动态生成超链接(Power Pivot度量实现)
先做个度量拿最大时长对应的工单ID
最大时长工单ID = VAR MaxDuration = MAX('RAWData'[DurationX]) RETURN CALCULATE( FIRSTNONBLANK('RAWData'[ID],1), FILTER('RAWData','RAWData'[DurationX] = MaxDuration) )要是有多个工单时长都是最大值,
FIRSTNONBLANK会返回第一个匹配的ID,需要的话可以换成CONCATENATEX把多个ID合并起来再做超链接度量(带ID清理逻辑)
最大时长工单超链接 = VAR CleanID = IF( ISERROR(SEARCH("co/",[最大时长工单ID])), [最大时长工单ID], REPLACE([最大时长工单ID],1,3,"") ) RETURN HYPERLINK("https://someurl.com/" & CleanID, [最大时长工单ID])把这个度量加到透视表里,筛选/切片的时候会自动同步更新,不会搞坏其他列或者月份字段
二、非透视表自动更新方案(Excel动态数组+结构化引用)
生成自动更新的月度唯一列表
在calc页的单元格里输入下面的公式,会自动识别RAWData里新增的月度数据:=SORT(UNIQUE(EOMONTH(RAWData[日期/时间(UTC)],-1)+1))计算各月度统计值
- 50分位时长:
=PERCENTILE.INC(FILTER(RAWData,EOMONTH(RAWData[日期/时间(UTC)],-1)+1=A2),RAWData[DurationX],0.5)(A2是月度列表里的单元格) - 90分位时长:
=PERCENTILE.INC(FILTER(RAWData,EOMONTH(RAWData[日期/时间(UTC)],-1)+1=A2),RAWData[DurationX],0.9) - 最大时长:
=MAXIFS(RAWData[DurationX],RAWData[日期/时间(UTC)],">="&A2,RAWData[日期/时间(UTC)],"<"&EDATE(A2,1))
- 50分位时长:
生成带ID清理的超链接
=LET( MaxDur, MAXIFS(RAWData[DurationX],RAWData[日期/时间(UTC)],">="&A2,RAWData[日期/时间(UTC)],"<"&EDATE(A2,1)), TargetID, INDEX(RAWData[ID],MATCH(MaxDur,RAWData[DurationX],0)), CleanID, IF(ISERROR(SEARCH("co/",TargetID)),TargetID,REPLACE(TargetID,1,3,"")), HYPERLINK("https://someurl.com/"&CleanID,TargetID) )用
LET函数简化了公式,结构化引用能保证RAWData新增数据后自动更新
三、ID清理逻辑替换说明
原来用RIGHT(xx,LEN(xx)-3)去掉“co/”,换成下面的公式,就算ID没有“co/”前缀也能正常用:
- Excel公式:
=IF(ISERROR(SEARCH("co/",A1)),A1,REPLACE(A1,1,3,"")) - DAX公式:
IF(ISERROR(SEARCH("co/",[ID])),[ID],REPLACE([ID],1,3,""))
内容的提问来源于stack exchange,提问作者Scott McCune
相关产品推荐
相关产品推荐

