DAX / Power BI - 最大数量

时间:2017-07-21 16:22:46

标签: max powerbi dax

我有一个计算列,它按日期返回每行的排名。从本质上讲,此专栏对客户的购买次数进行排名或“计算”(因为每次购买时,都会添加新行,并且该行的排名高于之前的购买次数。

Purchase Count = RANKX(FILTER(Purchases,Purchases[ID]=EARLIER(Purchases[ID])), Purchases[Date], ,asc)   

结果

请注意,Alison有3次购买,如果是按日期购买的第1次,第2次或第3次,则购买计数列计数

enter image description here

我想要的是一个度量,它基本上计算每个客户的最大值数量(这意味着1,因为每个客户只有1个最大值),但COUNT函数不接受MAX函数作为输入。即COUNT(MAXA(购买计数)

我想要开发的是这样的:

enter image description here

但我能做的最好的就是:这只是购买计数计算列的简单计数(如上所示)。我希望条形图与下面的“动态购买(测量)”列相匹配。换句话说,我希望x轴上的3值为1,因为只有1个人进行了3次购买。我想在x轴上使用2来获得值0,因为没有客户已经进行了2次购买,并且我希望x轴上的1值为1,因为“Billy”是唯一的仅购买1件的客户。通过一个简单的计数,它为Alison每列添加1,因为她已经进行了第一次,第二次和第三次购买。 我只想计算她的最大购买次数。我想知道她第一次和第二次购买

enter image description here

2 个答案:

答案 0 :(得分:1)

我认为以下内容可能有所帮助。我使用DAX导出了下表。然后,您可以在视觉的值选择中使用Count(Distinct)来获得您想要的内容。

enter image description here

我很快将这个堆积的柱形图与它一起扔了:

enter image description here

它显示:史蒂夫的最大购买数为1; John和Billy的最大购买数量分别为2;和艾莉森的最大购买数量为3。

我提到的Count(Distinct)设置是:

enter image description here

这里是添加MaxPerCustomer和CountOfMaxPerCustomerMatches列的DAX代码:

MaxPerCustomer = if(calculate(max(Table11[Purchase Count]),filter(Table11,Table11[Name]=earlier(Table11[Name])))=Table11[Purchase Count],calculate(max(Table11[Purchase Count]),filter(Table11,Table11[Name]=earlier(Table11[Name]))),BLANK())

CountOfMaxPerCustomerMatches = calculate(COUNT(Table11[MaxPerCustomer]),filter(Table11,Table11[MaxPerCustomer]=EARLIER(Table11[MaxPerCustomer])))

编辑附录如下: (此附录是对您的评论的回应)

然后,您可以根据上面的内容创建一个新表...

enter image description here

...使用Table = GROUPBY(Table11,Table11[MaxPerCustomer],"CountOfMaxPerCustomerMatchesGrouped",countx(CURRENTGROUP(),Table11[MaxPerCustomer])),它将为您提供:

enter image description here

然后将该新表用于视觉效果:

enter image description here enter image description here

答案 1 :(得分:0)

我提出的解决方案可能不是最优雅的解决方案,但它可以解决计算中的列和表,而不考虑切片机。

1)我使用CALENDAR函数在Power BI中创建了一个只是整数的表。

Counts = SELECTCOLUMNS(
    CALENDAR(DATE(1900, 1, 2), DATE(1900, 1, 6)), 
    "Count", DATEDIFF(DATE(1900, 1, 1), [Date], DAY)
)

Count Table

2)我将Counts表交叉连接到原始表并仅选择了必要的列。

PurchaseCounts = CROSSJOIN(
    SELECTCOLUMNS(Purchases, 
        "Date", Purchases[Date], 
        "ID", Purchases[ID]
    ),
    Counts
)

Crossjoin Table

3)在该交叉连接表中,我添加了所需的度量。

CustomerCount = CALCULATE(
    DISTINCTCOUNT(PurchaseCounts[ID]),
    FILTER(
        GROUPBY(PurchaseCounts, 
            PurchaseCounts[ID], PurchaseCounts[Count], 
            "PurchaseCount", COUNTX(CURRENTGROUP(), PurchaseCounts[Date])
        ),
        PurchaseCounts[Count] = [PurchaseCount]
    )
)

Measure Formula

4)我根据交叉连接表制作了一些快速视觉效果和切片器。按日期过滤时,直方图显示预期值。

Results