Ssas 基于运行总数的子样本分析

Ssas 基于运行总数的子样本分析,ssas,dax,Ssas,Dax,我是DAX的新手,我有一个我不知道如何解决的问题。我用一个人工的例子来简化它。我处于SSAS表格模型的环境中 假设我有一个“zirkbols”(发明)工厂和一个代表zirkbols销售额的表格。每位顾客购买了不同数量的zirkbols,评分为1至5。 该表如下所示: 使用此代码生成它: = DATATABLE( "ClientId"; INTEGER; "CountryCode"; STRING; "OrderDate"; DATETIME; "OrderAm

我是DAX的新手,我有一个我不知道如何解决的问题。我用一个人工的例子来简化它。我处于SSAS表格模型的环境中

假设我有一个“zirkbols”(发明)工厂和一个代表zirkbols销售额的表格。每位顾客购买了不同数量的zirkbols,评分为1至5。 该表如下所示:

使用此代码生成它:

= DATATABLE(
    "ClientId"; INTEGER; 
    "CountryCode"; STRING;
    "OrderDate"; DATETIME;
    "OrderAmount"; DOUBLE;
    "Rating"; INTEGER;
    {
        {123; "US"; "2018-01-01"; 502; 1};
        {124; "US"; "2018-01-01"; 400; 4};
        {125; "US"; "2018-01-03"; 60; 5};
        {126; "US"; "2018-01-02"; 160; 4};
        {124; "US"; "2018-01-05"; 210; 3};
        {128; "JP"; "2018-01-03"; 22; 5};
        {129; "JP"; "2018-01-07"; 540; 2};
        {130; "JP"; "2018-01-03"; 350; 4};
        {131; "JP"; "2018-01-09"; 405; 4};
        {132; "JP"; "2018-01-09"; 85; 5}
    }
)
我需要创建一些指标,为购买我30%销售额的客户样本提供统计数据,这些客户是最满意的客户之一。这意味着我需要按“评级”进行排名,并将“订单金额”相加,直到我得到至少30%的总金额。这个样本是我快乐的zirkbols车主。例如,对于这些快乐的zirkbols车主,我想知道他们的平均评级

我认为,如果我能将订单金额的总金额放在计算列中,这可能会更容易,但我想让分析师有可能只过滤“美国”销售额,我不知道在计算列中是否可行。 另一方面,我假设按评级的排名可以存储在计算列中(ranking=RANK.EQ([rating];ClientOrders[rating])

我预期会有以下结果:

正如我所说,我是SSAS和DAX的新手,所以我不知道我是否从错误的角度看待这个问题

问候,, 尼古拉


p.S.请同时查看对已接受答案的评论

我有一些DAX基本正常工作,但我需要回到它

同时,这里有一些代码:

Happy owners amount =
VAR Summary =
    SUMMARIZE (
        Orders,
        Orders[CountryCode],
        Orders[ClientId],
        Orders[Rating],
        "Amount", SUM ( Orders[OrderAmount] )
    )
VAR Ranked =
    ADDCOLUMNS ( Summary, "Rank", RANKX ( Summary, Orders[Rating] + 1 / [Amount] ) )
VAR Cumulative =
    ADDCOLUMNS (
        Ranked,
        "CumAmt", CALCULATE (
            SUM ( Orders[OrderAmount] ),
            FILTER ( Ranked, [Rank] <= EARLIER ( [Rank] ) )
        )
    )
VAR CutOff =
    MINX (
        FILTER (
            Cumulative,
            [CumAmt]
                > 0.3 * CALCULATE ( SUM ( Orders[OrderAmount] ), ALLSELECTED ( Orders ) )
        ),
        [Rank]
    )
RETURN
    SUMX ( FILTER ( Cumulative, [Rank] <= CutOff ), [Amount] )
快乐的主人=
风险值摘要=
总结(
命令,
订单[国家代码],
订单[客户ID],
订单[评级],
“金额”,总和(订单[订单金额])
)
VAR排名=
添加列(汇总,“排名”,RANKX(汇总,订单[评级]+1/[金额])
累积风险值=
添加列(
排列,
“累计金额”,计算(
总额(订单[订单金额]),
过滤器(排名,[Rank]0.3*计算(总和(订单[OrderAmount]),所有选定(订单))
),
[排名]
)
返回

SUMX(过滤器(累积,[等级]对于JP,您选择了5级,然后客户选择了4级,金额较小。对于我们,您选择了较大的金额作为第二选择。除非您也想解决背包包装问题,否则您可能应该选择另一种方法。嗨,Alexis,谢谢您的回答。我看到提出的问题有其特殊性如果我将条件“至少30%”更改为“最多30%”,那么解决起来就容易多了。在我的实际案例中,因为我有一个更大的样本,所以跨越30%的边界情况实际上并不显著。我在最后得到的平均评级的衡量标准是:averageRating:=VAR cumSum=ADDCOLUMNS(ClientOrders;“CumVal”SUMX(FILTER)(ClientOrders;[Ranking])我将您的答案标记为我的解决方案,因为它解决了我遇到的主要问题:我不知道您可以在度量中使用表变量(VAR)。谢谢!