PowerBI TopN Others
本文介绍了在PowerBI中实现动态排名功能的方法。通过创建维度表对销售、地区、产品类别等维度进行排序,并使用RANKX函数计算排名。
关键步骤包括:1)构建包含多个分析维度的集合表;
2)创建可动态切换的KPI指标度量值;
3)实现TOPN排名功能,将10名之后的数据自动归入Others类别。
PowerBi实现动态排名,以及将未计入排名的数据分配到Others
红色方框部分极为动态排名,并且 10名之后的数据分配到Others
首先制作排名维度表,这里按 销售、地区、产品类别维度进行排序
维度表-集合 = var _user = SELECTCOLUMNS(ADDCOLUMNS(VALUES(DimEmployee),"分析维度","销售人员"),"分析维度",[分析维度],"Key",[EmployeeKey],//主键"维度明细",[LastName],"Order",1)var _city = SELECTCOLUMNS(ADDCOLUMNS(VALUES(DimGeography),"分析维度","客户省份"),"分析维度",[分析维度],"Key",[GeographyKey],"维度明细",[StateProvinceName],"Order",2)var _subCaategory = SELECTCOLUMNS(ADDCOLUMNS(VALUES(DimProductSubcategory),"分析维度","产品子类别"),"分析维度",[分析维度],"Key",[ProductSubcategoryKey],"维度明细",[EnglishProductSubcategoryName],"Order",3)var _other = DATATABLE("分析维度",STRING,"Key",STRING,"维度明细",STRING,"Order",INTEGER,{{"销售人员",0,"其他",1},{"客户省份",0,"其他",2},{"产品子类别",0,"其他",3}}
)RETURN UNION(_user,_city,_subCaategory,_other)
创建 度量值,这个度量值 需要根据以上创建的维度表的选择进行相应的计算
KPI指标-维度 = var _select = SELECTEDVALUE('维度表-集合'[分析维度])//TREATAS 创建关联关系
//KEEPFILTERS 保持筛选
//必须使用以上两个函数,因为新创建的 度量值-集合表没有与 事实表进行关联,所以在计算时进行关联
var _kpi = SWITCH(TRUE(),_select = "销售人员",CALCULATE([KPI-指标],KEEPFILTERS(TREATAS(VALUES('维度表-集合'[Key]),DimEmployee[EmployeeKey]))),_select = "客户省份",CALCULATE([KPI-指标],KEEPFILTERS(TREATAS(VALUES('维度表-集合'[Key]),DimGeography[GeographyKey]))),_select = "产品子类别",CALCULATE([KPI-指标],KEEPFILTERS(TREATAS(VALUES('维度表-集合'[Key]),DimProductSubcategory[ProductSubcategoryKey]))),BLANK()
)RETURN _kpi
创建排名
RANKX排名 = RANKX(ALL('维度表-集合'[维度明细]),[KPI指标-维度])
根据排名返回对应的数据
TOPN-Others = var _r = [RANKX排名]var _topn = SELECTEDVALUE('TOPN参数'[TOPN参数])var _topnx = IF(_topn <= 0 , 20,_topn)var _dimdetail = SELECTEDVALUE('维度表-集合'[维度明细])//得到 <= 参数topn以前的合计
var _v1 = CALCULATE([KPI指标-维度],FILTER(VALUES('维度表-集合'[维度明细]), [RANKX排名] <= _topnx))var _v2 = CALCULATE([KPI指标-维度],FILTER(ALL('维度表-集合'[维度明细]), [RANKX排名] > _topnx))var v = IF(_dimdetail = "其他",_v2,_v1)RETURN v