。我有一项关于ABC公司按客户、项目、SalesPersons等进行收入分析的任务,我已经根据下面的方法创建了它。现在我对A,B,C类分别进行过滤。例如,我为客户收入做了A,B,C的细分。然后我需要过滤与"A“客户收入相对应的项目收入。表收入包括Client_key、Item_key、Amount字段。也许您可以推荐一个解决方案,如何在一个单独的表中显示现在的项目、金额,这将对应于适合"A“类的Clients_key?
我所拥有的:
_Key_MeasuresNeededRevenue =SUMX(过滤器(汇总(收入、RevenueClient_Key、RevenueItem_Key、“猫”、_Key_MeasuresClientABC、"Rev“、TotalRev)、Cat="A")
但它不能正常工作。作为
总结(收入,RevenueClient_Key,RevenueItem_Key,“猫”,_Key_MeasuresClientABC,"Rev",TotalRev)
没有正确地总结Client_key和Item_key (并不是所有的Item_key都被总结)。
但是如果我们去掉“猫”,_Key_MeasuresClientABC,SUMMARIZation就能正常工作了。
sum(RevenueAmount)
谢谢你的答谢。
发布于 2022-06-11 09:38:54
很难给出正确的答案。首先,我要问有关措施的细节(代码)。然后,在同一个表达式中使用求和和计算可能会因为上下文的变化而引起问题。因此,我按照建议将操作划分为以下两个步骤:
的情况下得到基座
--
VAR baseTable =
SUMMARIZE(
Revenue
,Revenue[Client_Key]
,Revenue[Item_Key]
)--
CALCULATE(
[ClientABC]
,Revenue[Client_Key]=baseTable[Client_Key] -- the value you have in the row
,Revenue[Item_Key]=baseTable[Item_Key] -- the value you have in the row
)因此,使用下面的语法,您将得到一个受控的值
VAR completeTable =
ADDCOLUMNS(
baseTable
,"Cat",_Key_Measures[ClientABC]
,"Rev",[TotalRev]
)然后是测量的结束
VAR endTable =
FILTER(
completeTable
,[Cat]="A"
)
RESULT
SUMX(endTable,[Rev])在我的ABC中,我使用以下方法:
--.... some code then:
VAR Val = SELECTEDVALUE('_SetOf_3'[ABC - class],BLANK())
-- '_SetOf_3' is an auxiliary table with preseted values. I made a slicer of it.
VAR Real_filtered_byClass =
FILTER(
SalesBy_ABC
,[ABC]=Val
)
VAR Result =
IF(
ISBLANK(Val)
,SUMX(SalesBy_ABC,[Amount])
,SUMX(Real_filtered_byClass,[Amount])
)
RETURN
Result别忘了你的报告过滤器。希望这能帮到你。如果没有,那么给出你的措施的细节。
发布于 2022-06-14 22:53:44
谢谢你这么快和详细的反应。是的,你是对的,你建议的步骤更符合逻辑和正确。一般来说,它可以工作,但不完全正确。我已经意识到原因了?原因是A,B,C在第二步进行动态过滤,
CALCULATE([ClientABC], Revenue[Client_Key]=baseTable[Client_Key] -- the value you have in the row
,Revenue[Item_Key]=baseTable[Item_Key] -- the value you have in the row
)基于行中的Item_key,利用A、B、C类对客户端进行分段(A、B、C类根据度量的ClientABC动态生成)。这不是所有按A,B,C划分的客户的列表。
当然,我也不会忘记报告过滤器。我用和你一样的方式来编码它。
非常感谢。我想我必须在某个地方应用一些ALLEXCEPT或Keepfilter。
或者我可以使用以下方法
tmpClients= filter(SUMMARIZE(Revenue,Revenue[Client_Key],"Cat",_Key_Measures[ClientABC]),
[Cat]="A")然后,我将这些客户机转换为列表:
c= CONCATENATEX (tmpClients,Revenue[Client_Key],", " ) 在这里,我想:bf6a59c2-068c-11ec-b83a-0cc47a8e53f,bf6a59c2-068c-11ec-b83a-0cc47a8e53f,bf6a59c2-068c-11ec-b83a-0cc47a8e53f
??但我需要引号:“bf6a59c2-068c-11ec-b83a-0cc47a8e53f”,"bf6a59c2-068c-11ec-b83a-0cc47aa8e53f",“bf6a59c2-068c-11ec-b83a-0cc47a8e53f”,.。
然后,我总结了所有客户和项目及其收入:
SUMMARIZE(Revenue,Revenue[Client_Key],
Revenue[Item_Key],"Revenue Total",SUM(Revenue[Amount]))FILTER(SUMMARIZE(Revenue,Revenue[Client_Key],
Revenue[Item_Key],"Revenue
Total",SUM(Revenue[Amount])),Revenue[Client_Key] in {c}) THe的结果是:
EVALUATE
var tmpClients=
filter(SUMMARIZE(Revenue,Revenue[Client_Key],"Cat",_Key_Measures[ClientABC]),[Cat]="A")
var c= CONCATENATEX (tmpClients,Revenue[Client_Key],", " )
return { SUMX(FILTER(SUMMARIZE(Revenue,Revenue[Client_Key],
Revenue[Item_Key],"Revenue
Total",SUM(Revenue[Amount]))
,Revenue[Client_Key] in {c})
,[Revenue Total])}发布于 2022-06-23 15:33:44
我已经解决了问题。
我根据选定的A、B、C类创建了按项目计算收入的方法:
`TotalRevClientCategoryItem =
var CatValue =SELECTEDVALUE(CategoryABC[CategoryABC])
var tmpClients= filter(calculatetable(SUMMARIZE(Revenue,Revenue[Client_Key],"Cat",_Key_Measures[ClientABC]),REMOVEFILTERS(Item[Item_Key])),[Cat]=CatValue) --selecting clients accirding to A,B,C or All categories. REMOVEFILTERS(Item[Item_Key]) - it's used for selecting all Clients, not only those matching to the Item in the current row.
var tmpClientswithLineAge = TREATAS(tmpClients,Revenue[Client_Key],CategoryABC[CategoryABC]) --restoring LineAge with Revenue table
return if(Catvalue="All",[TotalRev],CALCULATE(SUM(Revenue[Amount]),tmpClientswithLineAge))`
https://stackoverflow.com/questions/72576878
复制相似问题