利用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代码,后续有复用场景仅需微调即可。

代码如下:

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)

我们来看一下结果输出:

最近因为工作原因,停更了一段时间,还请小伙伴们见谅哦。

后面如果时间充足,白茶还会继续更新的哦,嘿嘿。


相关推荐
MediaTea5 分钟前
<span class=“js_title_inner“>Python:实例对象</span>
开发语言·前端·javascript·python·ecmascript
Hello.Reader20 分钟前
Flink 内存与资源调优从 Process Memory 到 Fine-Grained Resource Management
大数据·flink
feasibility.22 分钟前
多模态模型Qwen3-VL在Llama-Factory中断LoRA微调训练+测试+导出+部署全流程--以具身智能数据集open-eqa为例
人工智能·python·大模型·nlp·llama·多模态·具身智能
我需要一个支点22 分钟前
douyin无水印视频下载
爬虫·python
喵手24 分钟前
Python爬虫实战:采集各大会展平台的展会名称、举办时间、展馆地点、主办方、行业分类等结构化数据(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集大会展平台信息·展会名称举办时间展馆地址·采集数据csv/json导出
编码者卢布37 分钟前
【Azure APIM】如何实现对经过APIM并到达后端服务请求的全链路追踪呢?
python·flask·azure
0思必得01 小时前
[Web自动化] Selenium执行JavaScript语句
前端·javascript·爬虫·python·selenium·自动化
焱童鞋1 小时前
解决 MeteoInfoLab 3.9.11 中 contourfm 导致的 ArrayIndexOutOfBoundsException
开发语言·python
封奚泽优1 小时前
化学配对记忆游戏:用Python和Pygame打造趣味化学学习工具
python·pygame
梦幻精灵_cq1 小时前
问题切入『视角很重要』——ansi-color有效编码序列“单背景判定”小部件的“简洁精妙”
python