代码之家  ›  专栏  ›  技术社区  ›  N. Carrer

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

  •  1
  • N. Carrer  · 技术社区  · 6 年前

    我是DAX的新手,我有一个不知道怎么解决的问题。我用一个人工的例子来简化它。我在SSAS表格模型的背景下。

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

    Sample data

    使用以下代码生成:

    = 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]);客户订单[评级])。

    我期望得到以下结果:

    Result

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

    当做, 尼古拉

    另外,请参阅对已接受答案的评论

    1 回复  |  直到 6 年前
        1
  •  1
  •   Alexis Olson    6 年前

    我有一些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] )