首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >动态动态分析Power BI中的ABC分析:分类过滤问题

动态动态分析Power BI中的ABC分析:分类过滤问题
EN

Stack Overflow用户
提问于 2022-06-10 15:43:45
回答 3查看 298关注 0票数 1

。我有一项关于ABC公司按客户、项目、SalesPersons等进行收入分析的任务,我已经根据下面的方法创建了它。现在我对A,B,C类分别进行过滤。例如,我为客户收入做了A,B,C的细分。然后我需要过滤与"A“客户收入相对应的项目收入。表收入包括Client_key、Item_key、Amount字段。也许您可以推荐一个解决方案,如何在一个单独的表中显示现在的项目、金额,这将对应于适合"A“类的Clients_key?

我所拥有的:

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

_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就能正常工作了。

  1. _Key_MeasureClientABC = if(ClientRevC% <=0.7,"A",if(ClientRevC%<=0.9,"B","C"))

  1. ClientRevC% = var CurrentTotal=SUM(RevenueAmount) var TotalRev=calculate(TotalRev,ALLSELECTED(RevenueAmount)) var CumTotal= SUMX( filter(总结(ALLSELECTED(收入),ClientsClient,“收入总额”,SUM(RevenueAmount)),收入总额(RevenueAmount)),收入总收益鸿沟(CumTotal,TotalRev,0)

sum(RevenueAmount)

  1. TotalRev =

谢谢你的答谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-06-11 09:38:54

很难给出正确的答案。首先,我要问有关措施的细节(代码)。然后,在同一个表达式中使用求和和计算可能会因为上下文的变化而引起问题。因此,我按照建议将操作划分为以下两个步骤:

  1. 在不需要计算

的情况下得到基座

--

代码语言:javascript
复制
  VAR baseTable = 
         SUMMARIZE(
                 Revenue
                 ,Revenue[Client_Key]
                 ,Revenue[Item_Key]
        )

  1. 将度量结果添加到基中。在ADDCOLUMNS中添加度量值结果时,可以将度量放入“行”上下文中。在行上下文中,度量ClientABC将具有如下的语法:

--

代码语言:javascript
复制
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
)

因此,使用下面的语法,您将得到一个受控的值

代码语言:javascript
复制
VAR completeTable = 
        ADDCOLUMNS(
            baseTable 
            ,"Cat",_Key_Measures[ClientABC]
            ,"Rev",[TotalRev]
    )

然后是测量的结束

代码语言:javascript
复制
VAR endTable = 
    FILTER(
            completeTable
            ,[Cat]="A"
    )

RESULT 
    SUMX(endTable,[Rev])

在我的ABC中,我使用以下方法:

代码语言:javascript
复制
--.... 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

别忘了你的报告过滤器。希望这能帮到你。如果没有,那么给出你的措施的细节。

票数 0
EN

Stack Overflow用户

发布于 2022-06-14 22:53:44

谢谢你这么快和详细的反应。是的,你是对的,你建议的步骤更符合逻辑和正确。一般来说,它可以工作,但不完全正确。我已经意识到原因了?原因是A,B,C在第二步进行动态过滤,

代码语言:javascript
复制
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。

或者我可以使用以下方法

  1. 我发现所有客户都符合选定的ABC类别:

代码语言:javascript
复制
    tmpClients=    filter(SUMMARIZE(Revenue,Revenue[Client_Key],"Cat",_Key_Measures[ClientABC]), 
                   [Cat]="A")

然后,我将这些客户机转换为列表:

代码语言:javascript
复制
     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”,.。

然后,我总结了所有客户和项目及其收入:

代码语言:javascript
复制
    SUMMARIZE(Revenue,Revenue[Client_Key],                                  
              Revenue[Item_Key],"Revenue Total",SUM(Revenue[Amount]))

  1. 只从1步筛选客户端:

代码语言:javascript
复制
FILTER(SUMMARIZE(Revenue,Revenue[Client_Key],                                           
       Revenue[Item_Key],"Revenue 
                    Total",SUM(Revenue[Amount])),Revenue[Client_Key] in {c})                                                 

  1. SUMX通过步骤4中的过滤获得收入.

THe的结果是:

代码语言:javascript
复制
    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])}
票数 1
EN

Stack Overflow用户

发布于 2022-06-23 15:33:44

我已经解决了问题。

我根据选定的A、B、C类创建了按项目计算收入的方法:

代码语言:javascript
复制
`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))

`

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72576878

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档