• 利用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)
    

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

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

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

  • 相关阅读:
    C++回顾录
    c指针进阶
    如何选择对应的学习方向呢
    k8s(3)
    补码 符号数的二进制 整数
    CSS选择器
    Matlab——二维绘图(最为详细,附上相关实例)
    Android学习笔记 78. 输入控件
    strimzi实战之三:prometheus+grafana监控(按官方文档搞不定监控?不妨看看本文,已经踩过坑了)
    如何利用maven进行依赖管理
  • 原文地址:https://blog.csdn.net/sterln/article/details/139383454