Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
If statement 展开power query中高于或低于所有类似列的值_If Statement_Powerbi_Conditional Statements_Powerquery_Calculated Columns - Fatal编程技术网

If statement 展开power query中高于或低于所有类似列的值

If statement 展开power query中高于或低于所有类似列的值,if-statement,powerbi,conditional-statements,powerquery,calculated-columns,If Statement,Powerbi,Conditional Statements,Powerquery,Calculated Columns,我有一张桌子如下 |---------------------|---------------------| | Name | VEC | |---------------------|---------------------| | A | null |

我有一张桌子如下

      |---------------------|---------------------|    
      |       Name          |         VEC         |          
      |---------------------|---------------------|
      |         A           |        null         |              
      |---------------------|---------------------|
      |         A           |         null        |                
      |---------------------|---------------------|
      |         B           |         null        |                 
      |---------------------|---------------------|
      |         B           |         null        |                
      |---------------------|---------------------|
      |         B_1         |         54          |               
      |---------------------|---------------------|
      |         D           |         null        |                
      |---------------------|---------------------|
      |         D_1         |         null        |               
      |---------------------|---------------------|
      |         E           |         null        |                
      |---------------------|---------------------|
      |         E_1         |         454         |               
      |---------------------|---------------------|
      |         E_2         |         454444      |               
      |---------------------|---------------------|
我试图得出以下结果:

  |---------------------|---------------------|---------------------|    
  |       Name          |         VEC         |     Costum          |      
  |---------------------|---------------------|---------------------|
  |         A           |        null         |          REF        |        
  |---------------------|---------------------|---------------------|
  |         A           |         null        |            REF      |      
  |---------------------|---------------------|---------------------|
  |         B           |         null        |           REF       |      
  |---------------------|---------------------|---------------------|
  |         B           |         null        |           RUP       |      
  |---------------------|---------------------|---------------------|
  |         B_1         |         54          |            RUP      |      
  |---------------------|---------------------|---------------------|
  |         D           |         null        |        REF          |                   
  |---------------------|---------------------|---------------------|
  |         D_1         |         null        |         REF         |              
  |---------------------|---------------------|---------------------|
  |         E           |         null        |          RUP        |              
  |---------------------|---------------------|---------------------|
  |         E_1         |         454         |         RUP         |             
  |---------------------|---------------------|---------------------|
  |         E_2         |         454444      |          RUP        |               
  |---------------------|---------------------|---------------------| 
在某些情况下,字母在VEC中具有值,因此可以使用条件列轻松解决此问题,条件列检查VEC并完成

然而,在某些情况下,字母会重复出现,比如B后面跟着u。 在这种情况下_1或_2,_3。。。将是唯一具有值的

这里条件列不起作用,因为我需要第一次出现字母,即仅A或B在costum列中获得一行REF或RUP

#"Promoted Headers" = Table.PromoteHeaders(Table1_Sheet, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"Name", type text}, {"VEC", Int64.Type}}),
    #"Added Conditional Column" = Table.AddColumn(#"Changed Type", "Custom", each if [VEC] = null then "REF" else "RUP")
in
    #"Added Conditional Column"

我找到了以下解决方案,我认为这可能会有所帮助

这对我来说有点过头了,因此如果有人有更好、更简单、更直截了当的东西,我真的很高兴看到它是如何做到的

我使用下面的power查询,首先为VEC添加一列,然后在u和最后的uding Record.Field处拆分名称,以复制或多或少相当于查找的内容

#"Changed Type" = Table.TransformColumnTypes(#"Renamed Columns",{{"Name", type text}, {"VEC", Int64.Type}, {"          ", type text}}),
    #"Removed Columns" = Table.RemoveColumns(#"Changed Type",{"          "}), 
    #"Added Custom1" = Table.AddColumn(#"Removed Columns", "NUM", each if [VEC] <> null then 1 else 0),
    #"Added Custom2" = Table.AddColumn(#"Added Custom1", "Split Name", each Text.Split ([Name], "_"){0}),
    #"Grouped Rows1" = Table.Group(#"Added Custom2", {"Split Name"}, {{"Name_SUM", each List.Sum([NUM]), type number}}),
   #"Added Custom3" = Table.AddColumn(#"Added Custom2", "REF or RUP", each Record.Field(#"Grouped Rows1"{[Split Name=[Split Name]]}, "Name_SUM")),
    #"Added Custom" = Table.AddColumn(#"Added Custom3", "Custom", each if [REF or RUP] <> 0 then "RUP" else "REF")
   in
    #"Added Custom"
因此,我有以下结果:

您还可以使用自定义列和如下所述的度量值来实现您的要求-让您的VEC列数据类型为整数

首先用下面的代码创建一个自定义列-

group_name = 

VAR current_row_name = ref_rup[Name]

VAR current_row_group = 
IF(
    FIND("_",current_row_name,1,0) = 0,
    current_row_name,
    LEFT(
        current_row_name,
        FIND("_",current_row_name,1,0) - 1
    )
)

RETURN current_row_group
ref or rup = 

VAR current_row_name = min(ref_rup[Name])
VAR current_row_group = min(ref_rup[group_name])

VAR current_row_group_sum = 
CALCULATE(
    SUM(ref_rup[VEC]),
    FILTER(
        ALL(ref_rup),
        ref_rup[group_name] = current_row_group
    )
)

RETURN IF(current_row_group_sum > 0, "RUP", "REF")
现在用下面的代码创建度量-

group_name = 

VAR current_row_name = ref_rup[Name]

VAR current_row_group = 
IF(
    FIND("_",current_row_name,1,0) = 0,
    current_row_name,
    LEFT(
        current_row_name,
        FIND("_",current_row_name,1,0) - 1
    )
)

RETURN current_row_group
ref or rup = 

VAR current_row_name = min(ref_rup[Name])
VAR current_row_group = min(ref_rup[group_name])

VAR current_row_group_sum = 
CALCULATE(
    SUM(ref_rup[VEC]),
    FILTER(
        ALL(ref_rup),
        ref_rup[group_name] = current_row_group
    )
)

RETURN IF(current_row_group_sum > 0, "RUP", "REF")
这是您的最终输出-


您获得所需输出的方式很好。我只是在下面使用Power Query添加了一个选项

步骤1:向基表中添加自定义列,如下所示-

if Text.PositionOf([Name],"_") = -1
    then [Name]
else
    Text.Start([Name],Text.PositionOf([Name],"_"))
if [sum] = null then "REF" else "RUP"
这是输出-

步骤2:现在复制基表,并在列Custom上应用groupby,在列VEC上应用SUM。您可以在自定义列上单击鼠标右键,然后从列表中选择“分组方式”选项,并按如下所示进行配置-

if Text.PositionOf([Name],"_") = -1
    then [Name]
else
    Text.Start([Name],Text.PositionOf([Name],"_"))
if [sum] = null then "REF" else "RUP"
步骤3:在应用Group BY后,添加如下自定义列,最终结果如下-

if Text.PositionOf([Name],"_") = -1
    then [Name]
else
    Text.Start([Name],Text.PositionOf([Name],"_"))
if [sum] = null then "REF" else "RUP"
步骤4:现在使用自定义列将基表与新表合并,并在扩展和保持列自定义之后。1您将获得以下最终输出-


不确定你在这里实际面临什么问题。当自定义列完全基于VEC列中的值生成时,对列名中的值有什么依赖关系?如果可能的话,请多解释一些。请编辑您的示例数据并使用真实场景输出。这会有帮助的!我刚刚意识到我的错误!很抱歉如果你解决了这个问题,请发布答案,这可能会对将来的人有所帮助。对不起。我试着用我提议的答案来解释我自己。嗨,谢谢!但它会通过DAX吗?这真的很有趣,尽管我对电源查询方式很感兴趣!是的,这里所有的东西都是DAX的。明天我会尝试使用同样的用电量查询。你认为这个解决方案比我提出的解决方案更优雅吗?你能分享一下电源查询码吗?在您看来,从Power Query的处理工作来看,哪一项是最密集的?如果不使用真实数据衡量性能,很难说这一点。这只是另一个一次性分组的选项,如果我正确的话,您的方法可能会有更多的分组。所有代码都已提供。只需一个接一个地执行这些步骤,您将获得所需的输出。如果任何步骤需要更多细节,请告诉我。喔…好的。我正在再次检查它,并尝试以这种方式应用它。