1

我有一个组合图表,它显示了一个人支付账单所需的平均天数。

图表的维度是= [Pay Month Year last 12 months]

没有尺寸限制

有 1 个表达式被调用Average,其定义为:

avg({< InvoicefromSqlType = {'Invoices'},[Is Invoice Paid] = {'Y'},[Is Positive Amount] = {'Y'},[Is Paid last 12 months] = {'Y'},DueGroups=,[Pay Month Year last 12 months]=>}[Days to Pay])`

它是按表达式排序的,即[Pay Month Year last 12 months]

现在上面的字段是这样构建的:

[支付月份年份过去 12 个月]

If([Pay Date] >= '$(vPeriodS12)',[Pay Month year]) as [Pay Month Year last 12 months],

有效载荷顺序:

Load * Inline [Pay Month Year last 12 months
May-2014
Jun-2014
Jul-2014
Aug-2014
Sep-2014
Oct-2014
Nov-2014
Dec-2014
Jan-2015
Feb-2015
Mar-2015
Apr-2015
May-2015
];

现在发生的事情是每个月都到月底,下个月需要手动添加并删除第一个月(例如,在上面我将删除行 May-2014 并在最后添加行 Jun-2015 )

此外,如果定义了尚无数据的月份,即您已硬编码 2015 年 6 月,而当前月份为 2015 年 5 月,则 2015 年 6 月将显示 2014 年的数据,并且月份的顺序会混淆。

我想要做的是完全消除上面几个月硬编码的需要,并让它自己完成。

如果您需要更多信息,请告诉我

4

1 回答 1

1

与其使用您可能必须手动更新的“排序顺序”表,不如执行以下操作:

  • 创建一个派生自[Pay Date]该字段的新字段,该字段返回您可以排序的月份和年份。例如:

    dual(date(makedate(year([Pay Date]),num(month([Pay Date]))),'MMM-yyyy'),
    year([Pay Date]) * 100 + num(month([Pay Date]))) as PayMonthYear
    

    在这里,该dual函数允许您将字段值的不同表示与其基础值相关联。例如,这里我们将基础数据设置为[Pay Date]添加到月份的年份,但声明它应该显示为MMM-yyyy。例如,在内部,QV 仍然看到值 201502,但将其显示为 Feb-2015。这意味着您可以根据其基础价值对其进行正确排序。

    使用dual是一个很大的话题,请查阅 QV 的内置帮助以获取更多信息。

  • 将图表维度从更改[Pay Month Year last 12 months]为使用PayMonthYear并将排序设置为升序。这意味着即使添加了新月份,您的月份也会正确排序。

  • PayLoadOrder从脚本中删除表格。

替代方法

另一种方法是使用在您的Pay Date字段上连接的日历表。这将达到同样的效果,但是,您也可以将“年初至今”指示器也集成到日历中,并将其从主表中删除。我快速拼凑的一个例子如下所示:

MinMax:
LOAD 
   Max([Pay Date]) AS MaxDate,
   Min([Pay Date]) AS MinDate
RESIDENT MyData;

LET varMinDate = Num(Peek('MinDate',0,'MinMax'));      // 0 is first record
LET varMaxDate = Num(Peek('MaxDate',-1,'MinMax'));      // -1 is last record
LET varToday = Num(Today());

MasterCalendar:
LOAD
    monthstart([Pay Date]) >= monthstart(AddMonths(Today(),-12)) as PaidInLast12MonthsFlag,
    dual(date(makedate(year([Pay Date]),num(month([Pay Date]))),'MMM-yyyy'),year([Pay Date]) * 100 + num(month([Pay Date]))) as PayMonthYear
    [Pay Date];
LOAD
   date($(varMinDate) + RecNo() - 1,'DD/MM/YYYY') as [Pay Date]
AUTOGENERATE num($(varMaxDate)) - num($(varMinDate)) + 1;

DROP TABLE MinMax;

因此,在上面,如果该字段的值出现在过去 12 个月内,则该字段等于,PaidInLast12MonthsFlag否则。您可以在集合分析表达式中使用它作为过滤器。此外,您可以将其用作图表维度。-1[Pay Date]0PayMonthYear

于 2015-05-13T13:31:35.690 回答