代码之家  ›  专栏  ›  技术社区  ›  JScott

增强查询:跨多个列/行向设置的限制添加字符

  •  0
  • JScott  · 技术社区  · 6 年前

    我对PQ很陌生,我很确定它可以在这种情况下做我需要的事情,但我需要帮助找出如何做到这一点。

    0将需要变成“0000.00”

    我想我应该能够使用文本。插入函数,但我对m语言不够熟悉,无法让它完成我希望它做的事情。

    有什么解决方案/建议吗?

    3 回复  |  直到 6 年前
        1
  •  0
  •   Marc Pincince    6 年前

    这是我之前的回答。。。设置为使用函数。对于每个要重新格式化的列,您只需调用该函数一次。每次调用函数时,只需将要重新格式化的列的名称传递给函数。

    创建新的空白查询:

    enter image description here

    在高级编辑器中打开新查询并高亮显示其中的所有内容:

    enter image description here

    let 
    
        FormatIt = (SourceColumn) => 
    
    let
    
        Base = Number.Round(SourceColumn,2)*.01,
        Source = try Text.Start(Text.Range(
                    if Base < 7 then Text.From(Base) & "001" else 
                    Text.From(Base),0,7),2) & Text.Range(Text.Range(
                        if Base < 7 then Text.From(Base) & "001" else 
                        Text.From(Base),0,7),3,2) & "." & Text.End(Text.Range(
                            if Base < 7 then Text.From(Base) & "001" else 
                            Text.From(Base),0,7),2)
                 otherwise "0000.00"
    
    in
        Source
    
    in 
    
        FormatIt
    

    ...然后单击“完成”。

    您将看到一个新函数已创建并列在屏幕左侧的查询列表中。

    单击调用自定义函数

    enter image description here

    enter image description here

    -源列是包含要格式化的数字的列。

    ...然后单击“确定”。

        2
  •  0
  •   Kresimir L.    6 年前

    你可以用这个公式 = Text.PadStart(Text.From([Column1]),4,"0")&".00") 在PQ中添加与您的需求相似的新列。

    enter image description here

        3
  •  0
  •   Marc Pincince    6 年前

    = Table.AddColumn(#"Changed Type", "Custom", each Text.Start(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),2) & Text.Range(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),3,2) & "." & Text.End(Text.Range(if Number.Round([Column1],2)*.01 < 7 then Text.From(Number.Round([Column1],2)*.01) & "001" else Text.From(Number.Round([Column1],2)*.01),0,7),2))

    enter image description here

    它假设您想要格式化的数字在第1列开始。它会创建一个新列。。。风俗带有格式化结果。

    要进行尝试,请从已经填充并加载到Power Query中的Column1开始;然后单击“添加列”选项卡,然后单击“自定义列”按钮,并按如下方式填充弹出窗口:

    enter image description here

    ...然后单击“确定”。

    随着时间的推移,可以用变量来制作重复的部分,以将其缩短一点。经过一段时间,这也可以转化为一个函数。但我现在没有时间,所以我想我至少应该给你“点东西”