PoweBI 用DAX 实现透视列和逆透视列

目录

1.透视列

2.逆透视列


PowerBi的编辑查询->转换,可以实现数据表的透视列(行转列,或者叫一列变多列)和逆透视列(列转行,或者叫多列变一列)功能。

但是这种方法会修改原始数据表,在开发中,可能会遇到客户不允许我们修改表的情况,那么我们就要考虑使用DAX来实现。

1.透视列

假设我们有一张透视表:

我们想把“兴趣”列,变成两列:"偏好视频"和"偏好作者",有的,就显示对应的兴趣,没有就显示空,或者无。

做法是使用ADDCOLUMNS()增加两列。 

DAX代码:

ADDCOLUMNS(
            '透视表',
            "偏好视频",IF(CONTAINSSTRING('透视表'[兴趣],"偏好视频"),'透视表'[兴趣],"无"),
            "偏好作者",IF(CONTAINSSTRING('透视表'[兴趣],"偏好作者"),'透视表'[兴趣],"无")
)

查询视图结果:

我们再把原先的"兴趣"列进行筛除:

SELECTCOLUMNS(
	 ADDCOLUMNS('透视表',
                "偏好视频",IF(CONTAINSSTRING('透视表'[兴趣],"偏好视频"),'透视表'[兴趣],"无"),
                "偏好作者",IF(CONTAINSSTRING('透视表'[兴趣],"偏好作者"),'透视表'[兴趣],"无")
                ),
	"客户",[客户],
	"偏好视频",[偏好视频],
	"偏好作者",[偏好作者]
)

得到:

原先的“兴趣”列被成功的单独分成两列统计,然后我们就可以通过将它作为计算表来进行其他统计计算,而不需要修改原始数据表

2.逆透视列

假设我们有一张逆透视表

我们要把"跑步"列和“游泳”列,合并成一个“爱好”列。

逆透视会比较麻烦一点,因为结果可能会增加行。

比如B,因为同时喜欢跑步和游泳,所以他会有两行。

解决思路是,每次我们只会用ADDCOLUMNS()处理一列,最后再把结果合并起来。

(1) 处理“游泳”列:

SELECTCOLUMNS(
    ADDCOLUMNS('逆透视表',"爱好",IF('逆透视表'[游泳] = "喜欢","喜欢游泳","")),
    "客户",[客户],
    "爱好",[爱好]
)

因为A不喜欢游泳,所以结果有空“爱好”行,我们把它过滤掉:

FILTER(
    SELECTCOLUMNS(
        ADDCOLUMNS('逆透视表',"爱好",IF('逆透视表'[游泳] = "喜欢","喜欢游泳","")),
        "客户",[客户],
        "爱好",[爱好]
    ),
[爱好]<>"")

得到:

(2) 同理,处理"跑步"列:

FILTER(
    SELECTCOLUMNS(
        ADDCOLUMNS('逆透视表',"爱好",IF('逆透视表'[跑步] = "喜欢","喜欢跑步","")),
        "客户",[客户],
        "爱好",[爱好]
    ),
[爱好]<>"")

(3)合并:

UNION(
		FILTER(
            SELECTCOLUMNS(
                ADDCOLUMNS('逆透视表',"爱好",IF('逆透视表'[游泳] = "喜欢","喜欢游泳","")),
                "客户",[客户],
                "爱好",[爱好]
            ),
        [爱好]<>""),
		FILTER(
            SELECTCOLUMNS(
                ADDCOLUMNS('逆透视表',"爱好",IF('逆透视表'[跑步] = "喜欢","喜欢跑步","")),
                "客户",[客户],
                "爱好",[爱好]
            ),
        [爱好]<>"")
	)

得到:

实际开发中,逆透视并不一定是完全转换为一列,更多情况是转换为两列。一列属性,一列值。

比如上面的表,转换后应该是"客户",“爱好”, "是否喜欢“,那么做法就更简单了,因为不需要额外处理空值:

UNION(SELECTCOLUMNS(ADDCOLUMNS('逆透视表',"爱好","跑步","是否喜欢",IF('逆透视表'[跑步]="喜欢","喜欢","不喜欢")),
				"客户",[客户],
				"爱好",[爱好],
				"是否喜欢",[是否喜欢]),
      SELECTCOLUMNS(ADDCOLUMNS('逆透视表',"爱好","游泳","是否喜欢",IF('逆透视表'[游泳]="喜欢","喜欢","不喜欢")),
	            "客户",[客户],
				"爱好",[爱好],
				"是否喜欢",[是否喜欢]))

为了在Ubuntu系统上成功搭建MJPEG视频解码的多核SoC实验环境,你需要遵循一系详细的配置步骤。首先,确保你的系统满足基本要求,如已安装VMware Workstation(如果你使用的是虚拟机)以及Ubuntu 9.04版本。由于SoCLib不支持Windows平台,使用虚拟机软件提供一个Linux环境是必要的。 参考资源链接:[使用SoCLib构建MPSoC:MJPEG视频解码实验](https://wenku.youkuaiyun.com/doc/4w26475i9q) 在开始之前,你需要下载并安装libtool-1.5。接下来,按照以下步骤进行环境的搭建: 1. 解压SoCLib软件包到用户主目录下的soclib_exp文件夹内。 2. 设置环境变量SOCLIB_DIR,使其指向projet_soc文件夹的位置。你可以通过编辑用户主目录下的.bashrc文件来永久设置环境变量: ``` export SOCLIB_DIR=/home/user/soclib_exp/projet_soc ``` 3. 在用户主目录下创建一个新的工程目录,并将硬件软件部分的相关文件复制到这个目录下。 4. 运行脚本install_env.shinstall.sh来设置系统环境变量,编译软件硬件部分。这些脚本会在/home/soclib_exp/hello_world目录下编译软件部分,并在/home/soclib_exp/HW目录下编译硬件部分。 5. 最后,建立软链接,确保硬件软件可以协同工作。这通常涉及到创建链接到编译后的文件,以及配置相关模拟器参数。 在配置过程中,确保检查所有路径是否正确,并且所有必要的依赖都已经安装。此外,为了避免潜在的权限问题,可能需要使用sudo来执行某些安装命令。 配置完毕后,你可以通过运行相应的SoCLib工具来加载你的MJPEG视频解码设计,并进行仿真测试。这将允许你在多核SoC环境中模拟视频解码流程,验证设计的正确性。 通过这个过程,你将不仅学会如何搭建配置SoCLib仿真平台,还能深入理解多核SoC的设计视频解码算法的实际应用。对于那些对嵌入式系统设计集成电路开发有兴趣的学生或工程师来说,这是一个非常宝贵的学习机会。如果你想进一步提高你的技能,并深入了解多核SoC设计的更多方面,建议你查看《使用SoCLib构建MPSoC:MJPEG视频解码实验》一书,它详细地介绍了这一过程,以及如何进行实验分析优化。 参考资源链接:[使用SoCLib构建MPSoC:MJPEG视频解码实验](https://wenku.youkuaiyun.com/doc/4w26475i9q)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值