DAX中列总数的百分比平均值

时间:2019-05-23 18:01:05

标签: powerbi dax powerquery

我有一个名为会议的事实表,其中包含以下内容:     -员工     - 分钟     -输入

然后我用以下内容创建了一个汇总表:

TableA = 
    SUMMARIZECOLUMNS ( 
    'meetings'[staff]
    , 'meetings'[type]
    , "SumMinutesByStaffAndType", SUM( 'meetings'[minutes] )
    )

这将创建一个数据透视表,其中人员作为行,列作为类型​​。

对于此数据透视表,我需要将每个单元格计算为列总数的百分比。对于每个员工,我需要平均百分比。会议类型只有5种,因此我需要将这些百分比之和除以5。

我不知道如何将由两列分组的一个数字除以由一列分组的另一个数字。我来自SQL世界,所以我的DAX非常糟糕,我迫切希望获得建议。

我尝试创建另一个汇总表来获取每种类型的分钟总数。

    TableB = 
    SUMMARIZECOLUMNS ( 
        'meetings'[type]
        , "SumMinutesByType", SUM( 'meetings'[minutes] )
    )

从那里我想要'TableA'[SumMinutesByStaffAndType] /'TableB'[SumMinutesByType]。

    TableC = 
    SUMMARIZECOLUMNS ( 
        'TableA'[staff],
        'TableB'[type],
        DIVIDE ( 'TableA'[SumMinutesByType], 'TableB'[SumMinutesByType]
     )

“无法确定表'Min by Staff-Contact'中'Minutes'列的单个值。当度量公式引用的列包含许多值而未指定诸如min,max,计数或求和以获得单个结果。”

我一直在遇到这个错误,这使我相信我不会采用“ Power BI方式”。

我尝试在报告视图上进行度量并创建矩阵。我尝试在查询编辑器中使用分组依据功能。我什至尝试了度量和汇总表。我可能会使它过于复杂,而且超出了预期范围,因此非常感谢您的帮助。

这是我正在尝试做的一个例子。

  ## Input/First table
  staff     minutes   type       
 --------- --------- ----------- 
  Bill      5         TELEPHONE  
  Bill      10        FACE2FACE  
  Bill      5         INDIRECT   
  Bill      5         EMAIL      
  Bill      10        OTHER      
  Gary      10        TELEPHONE  
  Gary      5         EMAIL      
  Gary      5         OTHER      
  Madison   20        FACE2FACE  
  Madison   5         INDIRECT   
  Madison   15        EMAIL      
  Rob       5         FACE2FACE  
  Rob       5         INDIRECT   
  Rob       20        TELEPHONE  
  Rob       45        FACE2FACE 


  ## Second table with SUM of minutes, Grand Total is column total.
  Row Labels    EMAIL   FACE2FACE   INDIRECT   OTHER   TELEPHONE  
 ------------- ------- ----------- ---------- ------- ----------- 
  Bill          5       10          5          10      5          
  Gary          5                              5       10         
  Madison       15      20          5                             
  Rob                   50          5                  20         
  Grand Total   25      80          15         15      35 


  ## Third table where each of the above cells is divided by its column total.
  Row Labels    EMAIL   FACE2FACE   INDIRECT      OTHER         TELEPHONE    
 ------------- ------- ----------- ------------- ------------- ------------- 
  Bill          0.2     0.125       0.333333333   0.666666667   0.142857143  
  Gary          0.2     0           0             0.333333333   0.285714286  
  Madison       0.6     0.25        0.333333333   0             0            
  Rob           0       0.625       0.333333333   0             0.571428571  
  Grand Total   25      80          15            15            35      



  ## Final table with the sum of the rows in the third table divided by 5.
    staff     AVERAGE      
   --------- ------------- 
   Bill      29.35714286  
   Gary      16.38095238  
   Madison   23.66666667  
   Rob       30.5952381 

请让我知道我是否可以澄清一个方面。

2 个答案:

答案 0 :(得分:0)

您无需创建其他表;一切都可以(并且应该)通过措施来完成。

首先,创建一个度量:

Type Count = CALCULATE(DISTINCTCOUNT(Meetings[Type]), ALL(Meetings))

此度量将始终返回5(不同会议类型的数量)。我们将在其他公式中使用此度量,而不是将其硬编码为5。这样做的好处是-如果您获得其他会议类型,则无需进行任何更改。

第二,创建一种度量会议纪要的方法(当然,您可以更好地命名它):

Total Minutes = SUM(Meetings[Minutes])

该度量仅汇总所有分钟,我们为方便起见而创建它-避免一次又一次地编写代码(在代码中重复使用度量始终是一个好主意)。

最后,我们为平均会议时间创建一个度量:

Average Minutes =
VAR Type_Count = [Type Count]
VAR Summary_Table =
    SUMMARIZE (
        Meetings,
        Meetings[Staff],
        Meetings[Type],
        "Minutes per Staff and Type", [Total Minutes],
        "Minutes per Type", CALCULATE ( [Total Minutes], ALLEXCEPT ( Meetings, Meetings[Type] ) )
    )
RETURN
    SUMX (
        Summary_Table,
        DIVIDE ( [Minutes per Staff and Type], [Minutes per Type] ) / Type_Count
    )

结果:

enter image description here

该度量还可以正确计算小计,使您可以深入查看详细信息,例如:

enter image description here

最后一项措施的工作原理:

  1. 首先,我们创建一个虚拟的摘要表:将表“ Meeting”按人员和会议类型分组;添加一列来计算每种人员/类型的总分钟数,然后添加一列仅计算每种类型的总分钟数(本质上是第二张表中的总计)。我们将摘要表保存在一个变量中(尽管您不必这样做,但这只是为了方便/代码清晰);
  2. 建立汇总表后,我们将使用SUMX函数逐条记录地对其进行迭代(循环),并划分新添加的列。然后汇总除法结果。

如果您有任何疑问,请告诉我。

答案 1 :(得分:0)

您可以使用Power BI中的内置功能,例如%Row total,请在下面找到快照Snapshot

如果这不是您要查找的内容,请告诉我(我已经使用了您的输入表)