小伙伴们,大家好呀!今天和大家分享一个Power BI中的业务场景需求:按照产品类别,在Power BI矩阵或者表格中呈现其对应的子类别,单独存放在一行。描述有点抽象,直接看看下面的截图。别震惊,企业里面的业务需求总是奇奇怪怪,如果无法教育用户,那么就享受折腾自己的过程。接下来是简单的实现思路。
CONCATENATEEX 函数在 Power BI 中用于合并来自不同列的文本值,同时允许你使用自定义的分隔符,并且可以应用条件或格式化。
其语法如下:
CONCATENATEEX(
<table>,
<column>,
[separator],
[ignoreBlank],
[includeHeaders]
)
参数说明:
<table>: 指定包含要合并的列的表。
<column>: 要从其中获取值的列。你可以在这里指定多个列,它们之间用逗号分隔。
[separator]: 可选参数,用于指定分隔合并项的字符串,默认为 ","(英文逗号)。
[ignoreBlank]: 可选参数,如果设置为 TRUE,则忽略空值;如果设置为 FALSE,则保留空值。默认为 TRUE。
[includeHeaders]: 可选参数,如果设置为 TRUE,则结果将包括列标题;如果设置为 FALSE,则不包括。默认为 FALSE。
例如,假设你有一个销售数据表,其中包含 ProductName, Quantity, 和 Price 列,你想要创建一个新的列,显示每个产品的名称和价格,可以使用以下公式:
ProductDetails =
CONCATENATEEX (
SalesTable,
{SalesTable[ProductName], SalesTable[Price]},
" - ",
TRUE (),
FALSE ()
)
这将为每个产品生成一个字符串,格式为 ProductName - Price,并忽略任何空白值。注意,这里我们使用了 {} 来指定多个列,使用 "-" 作为分隔符。
虽然参数很多,真正用到的其实只有几个,下面是实现上面所述需求的写法。
subcategories_2 =
IF (
HASONEVALUE ( '产品'[类别] ),
CONCATENATEX ( VALUES ( '产品'[子类别] ), '产品'[子类别], "、" ),
BLANK ()
)
CONCATENATEX函数参数1是一个函数返回的计算表(VALUES返回的是一个表),对产品表的子类别进行去重;
迭代去重后的子类别,将每个子类别进行文本拼接,拼接时候指定了顿号作为分隔符;
由于外部筛选上下文是类别,因此,会返回每个类别下的子类别的文本拼接;
由于总计处我们不需要返回全部的子类别的文本拼接,因此,使用HASONEVALUE进行布尔判断,如果是总计则返回空,否则返回计算;
针对这个需求,我们还可以进行举一反三,例如我现在的分隔符是顿号,返回的值都是一行,如果我希望每个子类别都是单独一行显示,且位于一个单元格内,又该如何实现呢(具体见下图)?
这里面我们只需要增加一个换行符unichar(10)即可,具体表达式如下:
subcategories_1 =
IF (
HASONEVALUE ( '产品'[类别] ),
CONCATENATEX ( VALUES ( '产品'[子类别] ), '产品'[子类别], UNICHAR ( 10 ) ),
BLANK ()
)
还不够?业务需求总是奇奇古怪,假设需要你把每个子类别的销售额也放进展示呢?这个问题也不难,使用文本函数对数值进行转换即可,这个小问题留个大家进行探索实践,欢迎分享你的实践~
免费课程:Power BI免费课程更新至202405月 免费课程绝大部分都是录制视频讲解,针对典型案例进行讲解,大家可以当做是一个字典,需要时候来找一找。免费课程不系统,有些基础内容小编默认你是知道,所以没有详细讲解,需要系统学习推荐看看小编的付费系统课程。 付费课程:Power BI会员课程更新(202310) 付费课程从零基础开始讲解,上手平滑,深入浅出,结合实际案例针对性强。具体可以参考介绍,课程内容持续更新,永久学习!(付费后,小编后面开发推出的所有课程和资源免费获取,无需再付费!) 交流答疑群:本群为付费制(49/一位),仅作为学习交流Power BI/Excel/Tableau/SQL等数据分析、数据处理工具用,有问题可以描述清楚你的问题,附上案例数据求助。除此外,不讨论任何无关事情,违者立刻剔除。啊?不是吧?加群还要付费?嗯,是的,所以,加群后请谨言慎行!群里会不定期分享各类模板、学习书籍等资讯,确认以上条件都能接受再添加小编私信!