BI技巧丨百分位计算

百分位计算

百分位数据计算,可以说是日常计算中比较常见的需求,通常会用于价格段位分析使用,而在PowerBI中,用于百分位计算的函数一共有四个。

语法

PERCENTILE.EXC(<column>, <k>) 
PERCENTILE.INC(<column>, <k>)
PERCENTILEX.EXC(<table>, <expression>, <k>) 
PERCENTILEX.INC(<table>, <expression>, <k>)

说明

1.PERCENTILE与PERCENTILEX的区别,与SUM和SUMX的区别是一样的,一个是聚合函数,一个是迭代函数。

2.INC指的是Inclusive,即包含的意思,EXC指的是exclusive,即不包含的意思,因此INC和EXC的区别在于,一个包含两端值,一个不包含两端值。

3.K代表百分位,介于0~1之间。

4.对于INC,若K不是1/(N-1)的倍数,则函数会进行插值,确认第K个百分位的值。

5.对于EXC,若K不是1/(N+1)的倍数,则函数会进行插值,确认第K个百分位的值。

返回结果

例子

案例数据如下:

将其导入到PowerBI中,通过表格,展示如下:

构建基础度量值:

001.SalesAmount =
SUM ( Fact_Sales[SalesAmount] )

例子1:

使用PERCENTILE.INC计算80%分位值。

002.Percentileinc =
PERCENTILE.INC ( Fact_Sales[SalesAmount], 0.8 )

结果如下:

例子2:

使用PERCENTILE.EXC计算50%分位值。

003.Percentileexc =
PERCENTILE.EXC ( Fact_Sales[SalesAmount], 0.5 )

结果如下:

例子3:

使用PERCENTILEX.INC计算80%分位值。

004.PercentileInc =
VAR PercentileInc =
    PERCENTILEX.INC ( 'Fact_Sales', [001.SalesAmount], 0.8 )
VAR Result =
    SUMX ( VALUES ( Fact_Sales[ProductName] ), PercentileInc )
RETURN
    Result

结果如下:

例子4:

使用PERCENTILEX.EXC计算50%分位值。

005.PercentileExc =
VAR PercentileExc =
    PERCENTILEX.EXC ( 'Fact_Sales', [001.SalesAmount], 0.5 )
VAR Result =
    SUMX ( VALUES ( Fact_Sales[ProductName] ), PercentileExc )
RETURN
    Result

结果如下:

例子5:

使用PERCENTILEX.INC计算分组聚合后80%分位值。

006.PercentileIncForGroup =
VAR SumOfGroup =
    ADDCOLUMNS (
        ALL ( Fact_Sales[ProductName] ),
        "@SalesAmount", [001.SalesAmount]
    )
VAR Result =
    PERCENTILEX.INC ( SumOfGroup, [@SalesAmount], 0.8 )
RETURN
    Result

结果如下:

例子6:

使用PERCENTILEX.EXC计算分组聚合后20%分位值。

007.PercentileExcForGroup =
VAR SumOfGroup =
    ADDCOLUMNS (
        ALL ( Fact_Sales[ProductName] ),
        "@SalesAmount", [001.SalesAmount]
    )
VAR Result =
    PERCENTILEX.EXC ( SumOfGroup, [@SalesAmount], 0.2 )
RETURN
    Result

结果如下:

这里是白茶,一个PowerBI的初学者。

<think>好的,用户想在Power BI中使用DAX计算百分位数,我需要提供详细的步骤和示例。首先,我应该回顾一下DAX中处理百分位数的相关函数。记得PERCENTILE.INC和PERCENTILE.EXC函数在Excel中很常用,但DAX中是否有对应的函数呢?可能需要用其他方法实现,比如结合排序和排名来计算。 接下来,我需要确定用户的需求场景。百分位数通常用于数据分析,比如销售数据的Top 10%或者客户收入的中位数。用户可能需要根据某个度量值(如销售额)来计算特定百分位数的值,以便进行分组或比较。 然后,我应该查阅相关引用资料。查看引用[2]提到的DAX函数说明,是否有直接计算百分位数的函数。如果DAX没有内置函数,可能需要使用RANKX和COUNT等函数组合实现。例如,先对数据进行排序,然后找到对应位置的数值。 接下来,分步骤构建DAX公式。假设用户有一个销售表,需要计算销售额的90th百分位数。步骤可能包括:添加排名列,计算总行数,确定百分位数的位置,然后通过FILTER和MAXX函数获取对应的值。 还要考虑异常情况,比如数据为空或者百分位数超出范围时的处理。可能需要使用IFERROR或者其他逻辑判断。 然后,编写示例代码并测试其正确性。确保公式在Power BI模型中能正确运行,并给出示例数据的结果。例如,使用SUMMARIZE或虚拟数据来演示计算过程。 最后,总结注意事项,比如性能优化,数据模型的影响,以及不同需求下的调整方法。可能需要提到使用变量存储中间结果以提高公式可读性和效率。 检查是否符合用户的要求:使用中文回答,结构清晰,步骤明确,并生成相关问题。确保引用的内容正确添加标识,比如引用[3]中提到的Power BI可视化教程相关部分,但这里可能更侧重DAX函数,所以引用[2]的DAX说明会更相关。</think>### 在Power BI中使用DAX计算百分位数的分步指南 #### 方法一:利用PERCENTILEX.INC函数(适用于Power BI 2019+版本) 若您的Power BI版本支持以下函数: ```dax 百分位数值 = PERCENTILEX.INC( '销售表', [销售额], 0.9 // 输入0-1的小数值,例如0.9表示90th百分位数 ) ``` #### 方法二:通用DAX公式(兼容所有版本) 1. **创建基础度量值**: ```dax Total Sales = SUM('销售表'[销售额]) ``` 2. **添加排名列**: ```dax Rank = RANKX( ALLSELECTED('销售表'), [Total Sales], , DESC, Dense ) ``` 3. **计算总记录数**: ```dax Total Count = COUNTROWS(ALLSELECTED('销售表')) ``` 4. **计算百分位数值**(以90th为例): ```dax 90th Percentile = VAR TargetRank = ROUND(0.9 * [Total Count], 0) RETURN MAXX( FILTER( ALLSELECTED('销售表'), [Rank] = TargetRank ), [Total Sales] ) ``` #### 验证公式 假设数据集: | 订单ID | 销售额 | |--------|--------| | 001 | 100 | | 002 | 200 | | 003 | 300 | | 004 | 400 | | 005 | 500 | 应用上述公式计算90th百分位数时: - 总记录数 = 5 - 目标排名 = 0.9 * 5 = 4.5 → 四舍五入为5 - 第五名的销售额 = 500 #### 注意事项 1. 数据预处理:确保待计算字段无空值,可使用`FILTER(!ISBLANK([字段]))` 2. 性能优化:对超过10万行的数据集,建议添加索引列[^2] 3. 动态参数:可通过创建参数滑块实现交互式百分位选择 4. 分组计算:结合`CALCULATE(...,ALLEXCEPT(...))`实现按类别分组计算
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fabric丨白茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值