利用Python处理DAX多条件替换

在这里插入图片描述

小A:白茶,救命啊~~~

白茶:什么情况?

小A:是这样的,最近不是临近项目上线嘛,有一大波度量值需要进行类似的调整,一个两个倒没啥,600多个,兄弟,救命啊~~~

白茶(假装沉思):兄弟,你这个事不好搞啊!

小A(眼神暗示):放心 ,规矩我懂!

白茶:开搞开搞!

在实际业务场景中,上述情况产生的频率是非常高的,究其根本,其实有三种原因:

  • 业务逻辑在频繁的改动,牵一发而动全身

  • 数据来源驳杂而不唯一

  • KPI指标过多,观察口径统一

举个例子

假设现在存在以下度量值:

Amt = 
SUMX ( 'Fact_Sales', 'Fact_Sales'[Quantity] * RELATED ( Dim_Product[Price] ) )
Qty = 
SUM ( 'Fact_Sales'[Quantity] )
AmtUnit = 
SWITCH (
    SELECTEDVALUE ( Config_Unit[UnitOrder] ),
    1, [Amt],
    2, [Amt] / 1000,
    3, [Amt] / 7.2,
    4,
        [Amt] / 7.2 / 1000
)
QtyUnit =
SWITCH (
    SELECTEDVALUE ( Config_Unit[UnitOrder] ),
    1, [Qty],
    2, [Qty] / 1000,
    3, [Qty],
    4, [Qty] / 1000
)
AmtData = 
SWITCH (
    SELECTEDVALUE ( Config_Date[DateOrder] ),
    1, [AmtUnit],
    2, CALCULATE ( [AmtUnit], DATESQTD ( 'Dim_Date'[Date] ) ),
    3, CALCULATE ( [AmtUnit], DATESYTD ( 'Dim_Date'[Date] ) )
)
QtyData = 
SWITCH (
    SELECTEDVALUE ( Config_Date[DateOrder] ),
    1, [QtyUnit],
    2, CALCULATE ( [QtyUnit], DATESQTD ( 'Dim_Date'[Date] ) ),
    3, CALCULATE ( [QtyUnit], DATESYTD ( 'Dim_Date'[Date] ) )
)

其前端页面展示如下:

在这里插入图片描述

在上图示例中,我们不难发现,Unit类型的度量值是为了切换单位使用的,而DataType是为了切换观测周期使用的,例如查看当月值、季度累计、年累计。

现在我们需要将上述代码中的数字,切换为文本类型,例如:Unit中的1,切换成RMB,DataType中的1切换成MTH,以此类推。

如果仅是上图这几个度量值,那么修改起来是非常简单的,但是如果“数据量级很大”,且“度量值很多”,这种情况下我们修改起来是很头疼的,有没有一种便捷的方法能解决这个问题呢?

解决方案

看到这里,相信有的小伙伴已经意识到了,这种多条件判断,且多条件替换的场景,可以用正则来解决。

但是还可以深化,如果我不会正则怎么办?

我们可以在Python中使用正则来解决此问题,利用通用的Python代码,后续有复用场景仅需微调即可。

代码如下:

import re

# 样例数据
text = """
在这里输入需要替换的文本
"""

# 定义替换规则
replacement_dict = {
    '条件1': '替换1',
    '条件2': '替换2',
    '条件3': '替换3'
}

# 定义替换函数
def replace_func(match):
    return f'{replacement_dict[match.group(1)]},'

# 正则替换
pattern = re.compile(r'\b(1|2|3),')
result = pattern.sub(replace_func, text)

print(result)

我们来看一下结果输出:
在这里插入图片描述
在这里插入图片描述

最近因为工作原因,停更了一段时间,还请小伙伴们见谅哦。
后面如果时间充足,白茶还会继续更新的哦,嘿嘿。

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/670421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

STM32_FSMC_HAL(介绍)

FSMC(Flexible Static Memory Controller)是STM32微控制器中的一种内存控制器,它允许微控制器与外部存储器接口,如SRAM、NOR Flash、NAND Flash和PSRAM等。FSMC特别适用于需要高速数据交换和大量数据存储的应用场景。 典型应用&a…

06.持久化存储

6.持久化存储 pv: persistent volume 全局的资源 pv,node pvc: persistent volume claim 局部的资源(namespace)pod,rc,svc 6.1:安装nfs服务端(192.168.111.11) yum install nfs-utils.x86_64 -y mkdir /data vim /…

Linux——多线程(二)

在上一篇博客中我们已经介绍到了线程控制以及对应的函数调用接口&#xff0c;接下来要讲的是真正的多线程&#xff0c;线程安全、线程互斥、同步以及锁。 一、多线程 简单写个多线程的创建、等待的代码 #include<iostream> #include<pthread.h> #include<un…

【案例实操】银河麒麟桌面操作系统实例分享,V10SP1重启后网卡错乱解决方法

1.问题现象 8 个网口&#xff0c; 命名从 eth1 开始到 eth8。 目前在系统 grub 里面加了 net.ifnames0 biosdevname0 参数&#xff0c; 然后在 udev 规则中加了一条固定网卡和硬件 pci 设备号的规则文件。 最后在 rc.local 中加了两条重新安装网卡驱动的命令&#xff08; rmmod…

yolov10模块

yolov10模块 1 C2f2 C2fCIB2.1 CIB2.2 RepVGGDW 3 PSA4 SCDown5 v10Detect 论文代码&#xff1a;https://github.com/THU-MIG/yolov10 论文链接&#xff1a;https://arxiv.org/abs/2405.14458 Conv是Conv2dBNSiLU PW是Pointwise Convolution(逐点卷积) DW是Depthwise Convolut…

45页超干PPT:AGV技术详解

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 完整版文件和更多学习资料&#xff0c;请球友到知识星球【智能仓储物流技术研习社】自行下载 AGV&#xff08;Automated Guided Vehicle&#xf…

JVM的垃圾回收机制

目录 GC的工作范围 谁是垃圾 怎么判断&#xff0c;某个对象是否有引用指向捏&#xff1f; &#xff08;1&#xff09;引用计数 缺陷 释放垃圾的策略 &#xff08;1&#xff09;标记清除&#xff08;不实用&#xff09; &#xff08;2&#xff09;复制算法 &#xff08…

公网IP地址如何查询?

公网IP地址是指在互联网中可以被全球范围内的设备访问的IP地址。在网络通信中&#xff0c;公网IP地址扮演着重要的角色&#xff0c;它可以标识设备在互联网中的位置。查询公网IP地址是一种常见的网络管理需求&#xff0c;因为它能够提供网络设备的准确位置信息&#xff0c;方便…

首套真题解析!安徽211难度适中!两门课!

这个系列会分享名校真题。并做详细解析&#xff01;此为24年第一套&#xff01; 今天分享的是22年合肥工业856的信号与系统试题及解析。 小马哥Tips&#xff1a; 本套试卷难度分析&#xff1a;本套试题内容难度中等&#xff0c;里面较多的考察了信号与系统的知识&#xff0c…

[Python]用Qt6和Pillow实现截图小工具

本文章主要讲述的内容是&#xff0c;使用python语言借助PyQt6和Pillow库进行简单截图工具的开发&#xff0c;含义一个简单的范围裁剪和软件界面。 主要解决的问题是&#xff0c;在高DPI显示屏下&#xff0c;坐标点的偏差导致QWidget显示图片不全、剪裁范围偏差问题。 适合有一点…

基于 Redis 实现分布式锁的全过程

前言 这一篇文章拖了有点久&#xff0c;虽然在项目中使用分布式锁的频率比较高&#xff0c;但整理成文章发布出来还是花了一点时间。在一些移动端、用户量大的互联网项目中&#xff0c;经常会使用到 Redis 分布式锁作为控制访问高并发的工具。 一、关于分布式锁 总结&#x…

QT 信号和槽教程,窗体和控件对象之间的沟通一般都使用信号和槽

Qt的信号和槽&#xff08;Signals and Slots&#xff09;机制是一种强大的对象间通信方式&#xff0c;它允许对象在完全解耦的情况下相互通信。以下是关于Qt信号和槽的简明教程&#xff1a; 基本概念 信号&#xff08;Signal&#xff09;&#xff1a;信号是由Qt对象发出的通知…

OpenAI已全面开放自定义GPT以及文件上传等功能

今天&#xff0c;OpenAI兑现了前段时间做出的承诺&#xff1a;免费向所有用户开放GPT-4o。这意味着所有的免费用户都能使用自定义GPT模型、分析图表等其他GPT-4o新功能了。现在ChatGPT界面长这样&#xff1a; 可以看出&#xff0c;免费用户也能使用GPT store中定义好的模型&…

构建智慧监控系统的功能架构,保障安全与便利

智慧监控系统作为现代城市安全管理的重要工具&#xff0c;不仅能够提供有效的安防监控&#xff0c;还能为人们的生活带来更多的便利。本文将探讨智慧监控系统的功能架构&#xff0c;以实现安全和便利的双重目标。 ### 1. 智慧监控系统背景 随着城市化进程的加速&#xff0c;人…

构建高效便捷的家政平台系统——打造优质家政服务的关键

随着人们生活节奏的加快和工作压力的增大&#xff0c;家政服务的需求日益增长。为了满足这一需求&#xff0c;家政平台系统应运而生。本文将探讨家政平台系统的整体架构&#xff0c;以实现高效便捷的家政服务&#xff0c;打造优质家政体验。 ### 1. 家政平台系统背景 随着现代…

语音降噪算法库介绍

一.语音降噪技术方向介绍 软件上进行语音降噪目前主要是两个方向&#xff1a;传统降噪算法和AI降噪算法&#xff0c;他们各有千秋&#xff0c;目前看他们各有千秋&#xff0c;有各自适用场景。 推荐一个不错的人工智能学习网站&#xff0c;通俗易懂&#xff0c;内容全面&#…

vue3组件传值---vue组件通过属性,事件和provide,inject进行传值

通过属性传值&#xff08;父传子&#xff09; vue的组件具有props自建属性&#xff08;自定义名称&#xff0c;类似于class&#xff0c;id的属性&#xff09;&#xff0c;通过这个属性&#xff0c;父组件可以向子组件传递参数&#xff0c;从而实现组件之间的信息传递&#xff0…

SpringSecurity6从入门到实战之Filter过滤器回顾

SpringSecurity6从入门到实战之Filter过滤器回顾 如果没有SpringSecurity这个框架,我们应该通过什么去实现客户端向服务端发送请求时,先检查用户是否登录,登录了才能访问.否则重定向到登录页面 流程图如下 官方文档&#xff1a;https://docs.spring.io/spring-security/referen…

自动化办公01 smtplib 邮件⾃动发送

目录 一、准备需要发送邮件的邮箱账号 二、发送邮箱的基本步骤 1. 登录邮箱 2. 准备数据 3. 发送邮件 三、特殊内容的发送 1. 发送附件 2. 发送图片 3. 发送超文本内容 4.邮件模板内容 SMTP&#xff08;Simple Mail Transfer Protocol&#xff09;即简单邮件传输协议…

单点11.2.0.3备份恢复到单点11.2.0.4

保命法则&#xff1a;先备份再操作&#xff0c;磁盘空间紧张无法备份就让满足&#xff0c;给自己留退路。 场景说明&#xff1a; 1.本文档的环境为同平台、不同版本&#xff08;操作系统版本可以不同&#xff0c;数据库小版本不同&#xff09;&#xff0c;源机器和目标机器部…