如何将计算列的每一行除以另一计算列的总数?

时间:2019-06-19 00:31:15

标签: powerbi dax percentage division calculated-columns

我无法使用此样本数据进行正确的除法:

Calculated column    Another calc. column
   48                  207
  257                  370
  518                  138
  489                  354
  837                  478
1,005                  648
1,021                2,060
1,463                2,164
2,630                1,818
2,993                2,358
3,354                3,633
4,332                5,234
4,885                6,108
4,514                6,008
4,356                6,888
4,824                7,382
7,082                5,988
7,498                6,059
                     4,865
                     4,192
                     3,816
                     2,851
                     2,768
                     2,093
                     2,207
                       770
                       397
                       149
                       178
                       336
                       167
                       124
                        18

我想做的是创建一个新的计算列。

对于每一行,我想获取Calculated column的值并将其除以Another calc. column的总数。

Another calc. column的总数= 82826

这是全新计算列中的期望输出,我们将其称为% Column

% Column

0,000579528167484
0,003102890396735
0,006254074807428
.
.
.
  

注意-这3列:Calculated columnAnother calc. column% Column都在同一表格中,并且都是计算列 >。

我尝试了很多公式,但是没有一个公式返回了所需的输出。 :|我想这是由于计算列的性质造成的,或者我没有掌握要点。

这是否有可能,或者我应该使用“度量”走另一条路?

你能阐明一些想法吗?

#######编辑#######

我整理了一个样本文件来帮助调试。这里是: https://drive.google.com/open?id=1r7kiIkwgHnI5GUssJ6KlXBAoeDRISEuC

如您所见:

  • Earned Daily % HARDCODED可以正常工作,因为82826被硬编码为分母。
  • Earned Daily % by StelioKEarned Daily % by Alexis Olson在使用SUM公式时会为除法输出相同的错误值。

如果这很重要,我将使用最新的Power BI Desktop版本:Version: 2.70.5494.701 64-bit (June 2019)

enter image description here

3 个答案:

答案 0 :(得分:3)

基本上,计算出的列没有错,Alexis和StelioK公式均正确。

这里的根本问题是计算列和度量之间的混淆。您正在以概念上错误的方式查看结果-通过矩阵可视化器,在切片器上启用了多个过滤器。如果删除筛选器,您将看到总数为140,920,而不是82,826。后一个数字是过滤后的数据集的总数,而不是整个表格的总数。

要正确执行此操作,您需要了解Power BI背后的几个基本概念:

  • 计算的列始终是静态的。一旦计算 完成后,它无法响应切片器或其他UI控件。它的 只是静态数据,与非计算列中的数据相同。达克斯 仅当您创建时,用于计算列的公式才处于活动状态 它们或重新加载数据时。
  • 如果您希望您的计算响应切片器等,则它们必须是度量。这是唯一的方法,没有例外。
  • 避免计算列,它们完全没有用。 Power BI就是有关措施的内容。我想不出使用计算列的单一原因。添加列时,实际上是在增强源数据,因为您感觉好像丢失了报表所需的内容。但是可以从源(您导入的数据库或文件)或使用完全针对此类任务设计的Power Query更好地解决该需求。最佳实践是:在源头上构建专栏,以进行其他所有设计措施。
  • 另一个重要建议:切勿将字段(列)直接放入视觉图像中。始终编​​写DAX度量,然后再使用它。依靠Power BI自动聚合是非常糟糕的做法。

答案 1 :(得分:2)

您可以使用以下DAX进行此操作:

% Column =
VAR TotalSum =
    SUM ( 'Table'[Another Calc column] )
RETURN
    IF (
        NOT ( ISBLANK ( 'Table'[Calc Column] ) ),
        CALCULATE ( DIVIDE ( SUM ( 'Table'[Calc Column] ), TotalSum ) ),
        0
    )

产生以下内容: enter image description here

我希望对您有帮助!

答案 2 :(得分:2)

对我来说,以下作品:

DIVIDE( Table1[Calculated column], SUM(Table1[Another calc column]) )

如果这不起作用,我需要查看一个文件来重现该问题。


编辑:查看文件后,82,826的总数仅对 具有所选过滤器的 有效

请注意,计算所得的列不是动态的,不能对过滤器作出响应,因为它们仅在首次加载表时才计算。

如果您需要它是动态的,则将其编写为更像这样的度量:

Earned Daily =
DIVIDE (
    CALCULATE (
        SUM ( 'Test data'[Value] ),
        'Test data'[Act Rem] = "Actual Units",
        'Test data'[Type] = "Current"
    ),
    CALCULATE (
        SUM ( 'Test data'[Value] ),
        ALLSELECTED ( 'Test data' ),
        'Test data'[Act Rem] = "Remaining Units",
        'Test data'[Type] = "PMB"
    )
)