基于 运行 总数的子样本分析
Analytics on a subsample based on a running total
我是 DAX 的新手,我有一个不知道如何解决的问题。我用一个人为的例子来简化它。我在 SSAS 表格模型的上下文中。
假设我有一个工厂 "zirkbols"(发明)和一个 table 代表 zirkbols 的销售。每个顾客都购买了不同数量的 zirkbols,并给出了 1 到 5 的评分。
table 看起来像这样:
使用此代码生成它:
= 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% 的客户样本提供统计数据,这些客户是最满意的客户之一。这意味着我需要按 "Rating" 排名并对 "OrderAmounts" 求和,直到我得到至少总数的 30%。这个样本是我快乐的 zirkbols 所有者。对于这些快乐的 zirkbols 所有者,我想知道他们的平均评分。
我认为,如果我可以将 运行 总订单金额放在计算列中,这可能会更容易,但我想让分析师能够过滤例如仅 "US" 销售额,我不知道这在计算列中是否可行。
另一方面,我假设评级排名可以存储在计算列中 (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] )
我是 DAX 的新手,我有一个不知道如何解决的问题。我用一个人为的例子来简化它。我在 SSAS 表格模型的上下文中。
假设我有一个工厂 "zirkbols"(发明)和一个 table 代表 zirkbols 的销售。每个顾客都购买了不同数量的 zirkbols,并给出了 1 到 5 的评分。 table 看起来像这样:
使用此代码生成它:
= 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% 的客户样本提供统计数据,这些客户是最满意的客户之一。这意味着我需要按 "Rating" 排名并对 "OrderAmounts" 求和,直到我得到至少总数的 30%。这个样本是我快乐的 zirkbols 所有者。对于这些快乐的 zirkbols 所有者,我想知道他们的平均评分。
我认为,如果我可以将 运行 总订单金额放在计算列中,这可能会更容易,但我想让分析师能够过滤例如仅 "US" 销售额,我不知道这在计算列中是否可行。 另一方面,我假设评级排名可以存储在计算列中 (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] )