如何使DAX仅返回日期最接近切片器的记录?

时间:2020-10-19 14:23:09

标签: powerbi dax

我希望有人能提供帮助,因为我已经完全没有想法了。

我正在处理绩效报告数据,产生了许多视觉效果以总结最新数据。为了允许用户回顾性地生成前几个季度的报告,我添加了一个日期切片器,作为“查看截至xxxx日期的数据”的方法。

这是我的数据表的粗略表示-截止日期为英文格式(dd / mm / yyyy):

Example Data Table

收视率是在另一个系统(基于一组目标)中计算的,因此此处没有计算列。实际上,有更多的指标可以报告不同的时间段(一些每周,一些每年等),并且在数据“到期”之前会有不同的滞后时间。

我最终设法获得了返回最新实际值的度量:

MostRecentActual =
VAR SlicerDate = MAX ( Dates[Day] )
RETURN
    CALCULATE (
        SUM ( Data[Actual] ),
        Data[Data due] <= SlicerDate,
        LASTDATE ( Data[Data due] )
    )

我不完全确定自己做对了,但似乎可行。如果我理解正确,我会很高兴,因此欢迎您提供解释或选择。

我现在要做的是在开始时显示一个基本的摘要饼图,该饼图显示了截至选定日期为红色,琥珀色,绿色或未分级的度量比例。因此,我需要它来计数每个等级的数量,但是每个度量仅一个,并且仅用于最接近切片器日期(但在此之前)的日期,具体取决于度量。因此,使用以上三个度量,如果将切片器设置为10/10/2019(英语格式-dd / mm / yyyy),它将针对度量A和C以及针对2019/20年第二季度的RAG进行计数对于措施B,因为存在时滞,这意味着数据要到月底才准备就绪。结果:-A:琥珀色,B:绿色,C:红色。

如果我能够创建对这些RAG进行计数的度量,那么我想将其添加到饼图中,并带有图例“ Rating”,以便将其适当地拆分。我目前似乎无法做到这一点,因为它不计算切片器之前的所有日期(而不仅仅是最近的日期),或者由于我不明白的原因而从某种程度上丢失了评分。

我们将非常感谢您的帮助。

非常感谢


进一步更新。我已经为此工作了一段时间!

我创建了一个COUNTAX度量来尝试做我想做的事情。在某些情况下,它起作用,但不是全部起作用,而在关键情况下则不起作用。我的度量是:

TestCountaxpt2 =
VAR SlicerDate = MAX ( Dates[Date] )
VAR MinDiff =
    MINX (
        FILTER (
            ALL ( Data ),
            Data[Ref] IN VALUES ( Data[Ref] ) &&
            Data[Data due] <= SlicerDate
        ),
        ABS ( SlicerDate - Data[Data due] )
    )
VAR thisdate =
    MINX (
        FILTER (
            ALL ( Data ),
            Data[Ref] IN VALUES ( Data[Ref] ) &&
            ABS ( SlicerDate - Data[Data due] ) = MinDiff
        ),
        Data[Data due]
    )
RETURN
    COUNTAX (
        FILTER ( Data, Data[Data due] = thisdate && Data[Ref] IN VALUES ( Data[Ref] ) ),
        Data[RAG]
    )

它为绩效指标的子集生成了下表,看起来几乎可以:

显示TestCountaxpt2度量结果的表:

Table showing the result of the TestCountaxpt2 measure

第三列是上面的小节,似乎每小节计算一个RAG,并且由于将切片器设置为2020年1月3日,日期看起来正确。第3栏的总计使我感到困惑。我不知道那是什么,我也不明白为什么它不等于7。

如果我从数据表中添加RAG列,则会出错:

相同的表格,但添加了RAG评级:

Same table but with RAG Rating added

生成的饼图也是错误的。它应该显示2绿色,2红色,2灰色(无等级)和1琥珀色。这就是发生的事情.......

DAX度量的饼图,图例中带有RAG评级:

Pie chart for the DAX measure, with RAG Rating in the legend

我可以看到它在做什么,这是在整个表中计算出切片器的最新到期日期,并使用该日期(即2020年1月1日),而我希望它为每个度量分别计算该日期。

链接到PBIX:

https://drive.google.com/file/d/1RTokOjAUADGHNXvZcnCCSS3Dskgc_4Cc/view?usp=sharing

修改公式以计算收视率:

RAGCount =
VAR SlicerDate =
    MAX ( Dates[Day] )
RETURN
    COUNTAX (
        ADDCOLUMNS (
            SUMMARIZE (
                FILTER ( Data, Data[Data due] <= SlicerDate ),
                Data[Ref],
                "LastDateDue", LASTDATE ( Data[Data due] )
            ),
            "CountRAG", CALCULATE (
                            COUNTA ( Data[RAG] ),
                            Data[Data due] = EARLIER ( [LastDateDue] )
                        )
        ),
        [CountRAG]
    )

这是它产生的表:

enter image description here

1 个答案:

答案 0 :(得分:1)

第三列总计= 4的原因很简单。 Array ( [0] => Array ( [id] => 29 [name] => Tony Stark [email] => starktony@yahoo.com [dob] => 1987-03-12 [created_at] => 2020-09-30 18:18:37 ) [1] => Array ( [id] => 28 [name] => Howard Stark [email] => starkhoward@gmail.com [dob] => 1895-07-12 [created_at] => 2020-09-30 18:07:05 ) [2] => Array ( [id] => 27 [name] => Ramesh Jain [email] => rameshjain@gmail.com [dob] => 1996-05-18 [created_at] => 2020-09-30 18:03:25 ) [3] => Array ( [id] => 17 [name] => Ho Yinsen [email] => senho@gmail.com [dob] => 1896-05-14 [created_at] => 2020-09-30 14:26:30 ) ) 在表中的所有Ref上都是最大的,并且只有四个Ref与该日期匹配。

要解决此问题并获取所需的总数,您需要遍历每个Ref并独立计算每个的SelectDate,然后再进行查找或求和。

我还没有测试这段代码,但是它应该给您一个尝试方向的想法:

SlicerDate

由内而外

  1. 过滤表以忽略SlicerDate之后的任何日期。
  2. 使用SUMMARIZE计算每个引用的LastDateDue。
  3. 使用特定的LastDateDue对每个Ref值的“实际”列求和。
  4. 遍历此汇总表以在当前范围内的所有引用中添加SumActual。

请注意,对于4,由于FILTER中最里面的数据表不是整个数据表,而是在本地过滤器上下文中可见的那一部分,因此可视化中的总计行将包含多个引用。