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