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
Powerbi 列出报告,每行显示一个特定行的百分比_Powerbi_Dax - Fatal编程技术网

Powerbi 列出报告,每行显示一个特定行的百分比

Powerbi 列出报告,每行显示一个特定行的百分比,powerbi,dax,Powerbi,Dax,我有一个Power BI报告,在列表可视化中显示多行(p和L报告) 它是从SQL中的视图填充的 其中一行是“总收入” 我需要每行显示其占总收入的百分比: i、 e 请注意,MTH加起来不等于总收入,所以我不能只取总收入,我需要取称为总收入的行作为分母 这是我在这里尝试做的一个完美的例子: 但当我尝试这种方法时(首先只是为了得到分母),我只在总收入行中得到一个值,在其他行中得到空白,如下所示: LINE MTH % ------------------------ L

我有一个Power BI报告,在列表可视化中显示多行(p和L报告)

它是从SQL中的视图填充的

其中一行是“总收入”

我需要每行显示其占总收入的百分比:

i、 e

请注意,
MTH
加起来不等于总收入,所以我不能只取总收入,我需要取称为总收入的行作为分母

这是我在这里尝试做的一个完美的例子:

但当我尝试这种方法时(首先只是为了得到分母),我只在总收入行中得到一个值,在其他行中得到空白,如下所示:

LINE           MTH     %
------------------------
Line1            5    
Total Revenue   50    50
Line2           20    
Line3            4    
Line4           12    
这是我的DAX:

MTH% = 
  SUMX(
      CALCULATETABLE(
         'vw_PandL',
         'vw_PandL'[Line]="TOTAL REVENUE"
          )
       ,
          [MTH]
  )
据我所知,我的表达式与网页上的示例之间的唯一区别在于,网页使用单独的维度来过滤行,而may表达式使用同一表中的列来过滤行

网页上给出的示例:

=SUMX( CALCULATETABLE(
        'InternetSales_USD', 
        'DateTime'[CalendarYear]=2006
     )  
 , [SalesAmount_USD])  
根据下面的评论,这应该行得通,但对我来说不行

我现在也尝试过:

CALCULATE(
    SUM([MTH]),
    FILTER(ALL('vw_PandL'),
        [Line]="TOTAL REVENUE")
        )
这会得到所有行总收入的总计,但忽略报告过滤器。这更近了

ALLEXCEPT
函数用于取消筛选除指定列之外的所有内容,但是当我尝试此操作时,我得到了相同的结果。它仍然没有注意到我的日期和网站过滤器:

CALCULATE(
    SUM([MTH]),
    FILTER(ALLEXCEPT('vw_PandL','vw_PandL'[DateKey],'vw_PandL'[DimSiteKey]),
        [Line]="TOTAL REVENUE")
        )
更新1:

我设法在一个简单的模型中重现了这一点

在许多事情中,我没有提到的是,
列由另一个名为
SortZZ

@Foxan Ng answer中的计算非常有效,但只要我对行列进行排序,它就会显示出我提到的行为:总收入数字只出现在总收入行上

经过进一步的调查:我甚至不需要对它进行排序,我可以将SortZZ列放入列表中,它将打破计算

解决方案

最终功能计算为:

Total Revenue = 
CALCULATE(
    SUM([MTH]),
    FILTER(
        ALLEXCEPT('vw_PandL','vw_DimPeriod'[Period],'DimSite'[Site]),
        'vw_PandL'[Line] = "Total Revenue")
)
诀窍在于
ALLEXCEPT

我的关系和切片器设置如下:

  • vw_PandL
    是一个事实表
  • vw\u dimperion
    PeriodCode
  • DimSite
    也在
    SiteKey
使用以下任一
ALLEXCEPT
表达式时,计算不符合我的切片器。也就是说,该数字是跨越所有时期和地点的线路总计:

  • 参考事实表中的连接键:

    ALLEXCEPT('vw_PandL'、'vw_PandL'[PeriodCode]、'vw_PandL'[SiteKey])

  • 参考尺寸标注中的连接键:

    ALLEXCEPT('vw_PandL'、'vw_dimperion'[PeriodCode]、'DimSite'[SiteKey])

  • 我能让calc尊重我的切片器的唯一方法是使用我在切片器中实际使用的字段,换句话说就是标签

    ALLEXCEPT('vw_PandL','vw_DimPeriod'[Period],'DimSite'[SiteName])
    

    要从中学习的关键是,这不仅仅是一个关系数据库,您可以在其中加入一个键,然后在标签上进行过滤。这些函数中提到的列和表非常重要。

    您提供的示例实际上有效,只是您应该将其创建为
    度量值,而不是
    计算列
    Measure
    使用过滤器,而
    computed Column
    即使应用了过滤器也会保持不变

    创建一个名为“总收入”的
    度量标准

    Total Revenue = 
    SUMX(
        CALCULATETABLE(
            'vw_PandL',
            'vw_PandL'[Line] = "Total Revenue"
        ),
        [MTH]
    )
    
    创建另一个名为
    %
    度量值

    % = VALUES(vw_PandL[MTH]) / [Total Revenue]
    
    它将与应用的过滤器一起工作

    2015年:

    2016年:

    根据数据集的性质,
    %
    度量值可以按如下方式修改,以便在不使用过滤器的情况下工作:

    % = SUM(vw_PandL[MTH]) / [Total Revenue]
    
    结果:

    希望能有帮助


    编辑:

    我将
    总收入
    更改为您提供的备选解决方案,它适用于排序列案例:

    Total Revenue = 
    CALCULATE(
        SUM([MTH]),
        FILTER(
            ALLEXCEPT('vw_PandL', vw_PandL[DateKey]),
            [Line] = "Total Revenue"
        )
    )
    
    无过滤器:

    应用的过滤器:

    在上面给出的示例中(包含行和MTH列的表以及相应的DAX),MTH%列的计算结果与您预期的一样(所有行为50)。我无法复制您描述的50只出现在总收入线上的情况。感谢您的回复-这给了我一些东西,我做了一些编辑。现在我发现了一些可以在每一行上得到结果的东西,但是我有过滤器,这些没有被应用。过滤的问题可能非常依赖于数据模型(例如,如果您在过滤维度属性,并且度量值引用了事实表键,那么它的行为可能会出人意料)。您是否可以展开上面的示例表,以便重新创建主模型中的错误?例如,添加维度键、更多行(例如,我假设您有多个TOTAL REVENUE行)和示例维度表(加上指示您正在筛选哪些列不起作用)?谢谢。我非常感谢你抽出时间来编造一个例子。您是第二个演示此功能是否如所述工作的人。但是,当我使用此计算时,它仅显示在总收入行上。它不会在其他行上重复。很明显,我在做的事情肯定有所不同,所以我会像你一样重新创造,并尝试找出不同之处。谢谢again@Nick.McDermaid当我将“总收入”创建为“列”时,它仅显示在带有“总收入”的行上。当我将其创建为“度量”时,它显示在每一行上。这可能是你面临的吗?这绝对是一个衡量标准。我无法在“表”选项卡中将其视为列(因此它不是列),但无论如何,我使用右键单击/new measure删除并重新创建了它,我已复制粘贴了您的精确表达式,其他行肯定为空
    Total Revenue = 
    CALCULATE(
        SUM([MTH]),
        FILTER(
            ALLEXCEPT('vw_PandL', vw_PandL[DateKey]),
            [Line] = "Total Revenue"
        )
    )