动态DAX的Power BI中的ABC分析:按类别单独筛选问题



。我有一项任务是按客户、项目、销售人员等对ABC收入进行分析。我根据以下指标创建了这项任务。现在,我正在分别按类别A、B、C进行筛选。例如,我对客户收入按A、B、C进行了细分。然后我需要过滤对应于";A";客户收入。表Revenue包括Client_key、Item_key和Amount字段。也许你可以推荐一个解决方案,现在如何在一个单独的表中显示Item,Amount,这将对应于Clients_key适合";A";类别

我所拥有的:

  1. 我用来获取项目和收入金额的度量是

_Key_Measures[NeededRevenue]=SUMX(过滤器(SUMMARIZE(收入,收入[Client_Key],收入[Item_Key]),"Cat",_Key_Mmeasures[ClientABC],"Rev",[TotalRev]),[Cat]=";A"),[Rev])

但它不能正常工作。作为

SUMMARIZE(收入、收入[Client_Key]、收入[Item_Key],"Cat"、_Key_Measures[ClientABC]、"Rev"、[TotalRev])

未正确汇总Client_key和Item_key(并非所有Item_key都已汇总)。

但如果我们去掉";Cat"_Key_Measures[ClientABC],SUMMARIZation正常工作。

  1. _Key_Measure[ClientABC]=如果([ClientRevC%]<=0.7,"A",如果([CClientRevC%]<=0.9,"B","C")

  2. 客户端RevC%=var CurrentTotal=SUM(收入[金额])var TotalRev=计算([TotalRev],ALLSELECTED(收入))var CumTotal=SUMX(filter(SUMMARIZE(ALLSELECTED(Revenue),Clients[Client],";收入总额";,SUM(收入[金额])),[收入总额]>CurrentTotal),[收入总额])返回除法(CumTotal,TotalRev,0)

  3. TotalRev=总和(收入[金额])

非常感谢。

感谢您的快速详细响应。是的,你是对的,你建议的步骤更符合逻辑,更正确。总的来说,它是有效的,但又不太正确。我意识到了为什么?原因在于A、B、C的动态滤波。在步骤2,

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类别是根据measure[ClientABC]动态形成的)。这不会是按A、B、C划分的所有客户的列表。

当然,我也不会忘记报告过滤器。我用和你一样的方式编码了它。

非常感谢。我想我必须在某个地方应用一些ALL、ALLEXCEPT或Keepfilters
或者我可以使用以下度量,其中

  1. 我发现所有客户都符合所选ABC类别:
tmpClients=    filter(SUMMARIZE(Revenue,Revenue[Client_Key],"Cat",_Key_Measures[ClientABC]), 
[Cat]="A")
  1. 然后我将这些客户端转换到列表中:
c= CONCATENATEX (tmpClients,Revenue[Client_Key],", " ) 

我在这里得到了:bf6a59c2-068c-11ec-b83a-0cc47a8e53f,bf6a59c2-068c-b83a-0c47a8e 53f,BF6a59C-068c-11ec-b83a-0C47a8e-53f

???但我需要引用:;bf6a59c2-068c-11ec-b83a-0cc47a8e53f"bf6a59c2-068c-11ec-b83a-0cc47a8e53f"bf6a59c2-068c-11ec-b83a-0cc47a8e53f">

  1. 然后我汇总所有客户和项目及其收入:
SUMMARIZE(Revenue,Revenue[Client_Key],                                  
Revenue[Item_Key],"Revenue Total",SUM(Revenue[Amount]))
  1. 从一个步骤中仅筛选客户端:
FILTER(SUMMARIZE(Revenue,Revenue[Client_Key],                                           
Revenue[Item_Key],"Revenue 
Total",SUM(Revenue[Amount])),Revenue[Client_Key] in {c})                                                 


  1. 通过在步骤4中过滤SUMX并获得Revenue

结果为:

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])}

我已经解决了这个问题。

我已经创建了根据所选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))

`

很难给出正确的答案。首先,我想问一下措施的细节(代码)。然后,由于上下文的变化,在同一表达式中使用summirize和计算可能会导致问题。因此,我按照建议将操作分为两个步骤,如:

  1. 无需任何计算即可获得基数

-

VAR baseTable = 
SUMMARIZE(
Revenue
,Revenue[Client_Key]
,Revenue[Item_Key]
)
  1. 将测量结果添加到基数。当你在ADDCOLUMNS中添加测量结果时;行";上下文在行上下文中,度量[ClientABC]的语法如下:

-

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

也不要忘记您的报告过滤器。希望这能帮助到你。如果没有,请提供您的措施详细信息。

相关内容

最新更新