DAX 实战 | FORMAT 函数详解


工坊的小伙伴们大家好~近期小编在做报表的时候接触到一个很实用的函数,想和大家分享一下。首先来介绍一下业务背景:

小编想要实现下图这样的一个表格的表头形式,这种列标题上是双表头的格式,我们叫做中国式表头;想要实现一个好看的中国式表头还是建议使用Power BI Report Builder来处理,但是由于部分原因,小编决定使用Power BI Desktop来实现。


首先放上数据源:

为了实现这样的表头,小编建了一个辅助表,具体内容如下图:排序1和排序2是为了让标题1和标题2可以按列排序,这样的话报表展示的时候就可以实现按照自己想要的顺序展示:


由于这张辅助表和事实表之间并没有直接的关系,所以我们需要建一个度量值来将这两张表联系起来:

关联 =

IF(

SELECTEDVALUE( '表头'[标题1]) = "时间" ,

MAX('表'[时间]),

IF(

SELECTEDVALUE( '表头'[标题1]) = "成本" ,

SUM('表'[成本]),

IF(

SELECTEDVALUE( '表头'[标题1] ) = "收入" ,

SUM('表'[收入]),

IF(

SELECTEDVALUE( '表头'[标题1] ) = "是否盈利" && SELECTEDVALUE( '表头'[标题2 ] ) = "盈利" ,

IF(

SELECTEDVALUE('表'[盈利])=0,

"-",

"√"

),

IF(

SELECTEDVALUE( '表头'[标题1] ) = "是否盈利" && SELECTEDVALUE( '表头'[标题2 ] ) = "亏损" ,

IF(

SELECTEDVALUE('表'[亏损])=0,

"-",

"√"

)

)))))

在经历过以上的一系列处理之后,表格的大致效果已经达到了我们想要的形式:


这个时候,小编希望可以将报表的时间列格式调整为xxxx年xx月,成本列保留两位小数,收入列展示为整数;但是根据上面的描述,我们是通过一个度量值将事实表和辅助表联系起来,那既然是由一个度量值联系起来的,现在的问题就是要将这一个度量值计算出的值,展示出三种不同的数字格式;

由于表头格式的限制,我们不能一个一个的分别去生成度量值,然后将它们拖拽进表格里,经过小编的不断翻阅,终于找到了以下这个函数来解决这个问题:

FORMAT函数,这是个转换函数,官方的定义是这样的:

FORMAT
FORMAT(, )
根据所指定的格式将值转换为文本。

它的第一个参数是想要转换的值,第二个参数是将值转换为指定格式的文本,那这个函数嵌套在度量值内是不是就可以解决格式的问题了呢?

于是小编抱着试试的态度赶快去试着改了一下日期的格式:

IF(

SELECTEDVALUE( '表头'[标题1]) = "时间" ,

FORMAT(MAX('表'[时间]),"YYYY年mm月")

然后表格的时间列格式就按照我想要的样式展示出来啦:

于是小编使用FORMAT函数也成功的实现了成本列的保留两位小数的格式,然后再把度量值的格式更改为整数就成功的解决了一个度量值展示出三种数字格式的问题:

IF(

SELECTEDVALUE( '表头'[标题1]) = "成本" ,

FORMAT(SUM('表'[成本]) ,"standard")

也就是说,如果一个值嵌套了FORMAT函数,那么这个值将会按照FORMAT指定的数字格式显示,不受整体度量值的数字格式影响。

关于FORMAT函数的第二个参数的格式问题,官方也列出了一部分常用的参数供大家参考,感兴趣的话可以点击以下链接查看更详细的关于第二参数的介绍:

https://docs.microsoft.com/zh-cn/dax/format-function-dax

关于中国式报表的其他内容,工坊也有相关介绍,各位小伙伴可以通过下方延伸阅读处的链接进行浏览。

本期内容就是这些,小伙伴们下期再见!


如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。



长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~


Power Pivot工坊