Power BI 矩阵值实现不同数据类型
你是否也面临这样的领导,在一个矩阵里,要求你某一列设置为整数(或其他),其他列设置为百分比(或其他),或许其他类型的设置使用条件函数就能满足,但一旦加入了百分比的展示,实现起来就没那么easy了。接下来就以一列整数一列百分比为例,谈谈如何实现这样的矩阵。
**首先展示下目标效果
日期 | 新用户数 | 留存率 |
---|---|---|
2023-01-01 | 200 | 15% |
2023-01-02 | 160 | 12.5% |
一、原始数据
矩阵只能是两个维度加一个度量,两个维度:一Rows(行)一Columns(列),一个度量:Values(值),因此准备三列数据,两列维度,一列度量。以用户日留存为例:Rows为用户产生的日期,Columns为固定值维度,即’ 新用户数’和’留存’(第二天是否留存),Values为在前两个维度下的值。如下表(表名:table):(别问我为什么不直接做成结果表的样式,然后直接用表格。本文主要目的在于解决此问题,借用简单的需求和数据,实际应用中会是较为复杂的逻辑以及不得不做成这样的表格)
日期 | 周期 | 留存 |
---|---|---|
2023-01-01 | 新用户数 | 200 |
2023-01-01 | 留存 | 30 |
2023-01-02 | 新用户数 | 160 |
2023-01-02 | 留存 | 20 |
注:原需求留存率需要做多天的,也就是列不止展示的三列,想要将新用户数列排在日期后面(即度量值的最前面),因此此处的’ 新用户数’前面都有一个空格(此处仅提供此种解决方式)。
二、操作步骤
第一步:新增新用户数列
新增新用户数列,将留存字段中的新用户数提取出来
新用户数 = IF([周期]=" 新用户数",BLANK(),CALCULATE(MAX([留存]),FILTER(table,[周期]=" 新用户数"&&[日期]=EARLIER([日期])))
注:因为留存率需要留存数除以新用户数,但是对于新用户数不需要除,因此,当周期=" 新用户数",显示为空,其余的取每个日期下新用户数的值(实际应用中,底表会存在多个维度,因此会使用到MAX及EARLIER函数);
第二步:计算Value列的值
Value = IF([周期]=" 新用户数",[留存],[留存]/[新用户数])
注:当[周期]=" 新用户数"时,显示留存字段中的新用户数,其余的计算留存率,即[留存]/[新用户数];
第三步:格式化Value列的值
Value列的新用户数仍然显示为整数,留存率显示为百分比
Format_Value = IF([Value]>=1,FORMAT([Value],"#,##"),FORMAT([Value],"0.00%"))
第四步:完成图表
单击矩阵图形,将[日期]拖入Rows(行),[周期]拖入Columns(列),[Format_Value]拖入Values(值)即可,其余格式按需调整。