我希望能够将 KPI(比如说营业额)限制在一个特定的时间范围内,我通过设置两个变量来选择该范围:下限和上限。
我创建了两个表,它们是从日历表派生的。
month_start:
LOAD MonthYear as MonthStart
RESIDENT Calendar;
month_end:
LOAD MonthYear as MonthEnd
RESIDENT Calendar;
我创建了两个过滤器,一个用于 MonthStart,一个用于 MonthEnd。
我设置了两个变量。我知道
GetFieldSelections()
返回一个字符串,因此我将其转换回日期。
=date#(GetFieldSelections(MonthEnd), 'MM YYYY')
=date#(GetFieldSelections(MonthStart), 'MM YYYY')
最后我用这个表达式来计算KPI:
SUM({$< MonthYear = {"<$(=vEndMonth)>=$(=vStartMonth)"}>} [turnover])
但这不起作用。我得到 0,00 欧元。
我做错了什么?我错过了什么?
编辑:
示例数据:
LOAD *
Inline [
%date, country, turnover
01.01.2021, DE, 1000
10.01.2021, AT, 2000
23.01.2021, CH, 1500
12.02.2021, DE, 2300
23.02.2021, DE, 5000
02.02.2021, CH, 1200
09.03.2021, AT, 3000
10.03.2021, CH, 1000
31.03.2021, DE, 3400
01.04.2021, CH, 2200
]
有一个日历附加到
%date
字段,其中 MonthYear
字段创建为 monthname(%date) as MonthYear
。
因此,我想要一个以
country
作为行维度、以 MonthYear
作为列的数据透视表。该措施是具有上述公式的主要素。
您可以使用月份、月份/年份等。 但最简单的方法是在日历和变量中使用日期。
确保您的日历有一个非聚合日期,如下所示:
Calendar:
Load
TempDate as %date,
Date(TempDate) as Date,
monthname(TempDate) as MonthYear,
Month(TempDate) as Month,
Year(TempDate) as year
然后创建结束字段和开始字段,如下所示:
[month_start]:
Load Distinct
MonthStart(Date) as MonthStart
RESIDENT Calendar;
[month_end]:
Load Distinct
MonthEnd(Date) as MonthEnd
RESIDENT Calendar;
你的变量没问题。 然后像这样创建您的度量(请注意该字段是日历中的“日期”字段:
SUM(
{$<
Date = {">=$(=vStartMonth)<$(=vEndMonth)"}
>}
[turnover])
应该可以。让我知道。
致以诚挚的问候,
请为 MonthYear 创建选择框,然后使用 Ctrl 选择所需的值。
请与您的数据和所需的输出共享小表作为表格,以便我将与您分享确切的示例脚本,例如:
SUM({$< MonthYear = {"<$(=Max(MonthYear))>=$(=Min(MonthYear))"}>} [turnover])
原来我设定的表情是错误的。
这有效:
Sum(
{$<
%date = {">=$(MonthStart)<$(MonthEnd)"}
>}
[turnover])
为什么?我不得不删除
=
)里面的
$(=...
正如我将变量定义为
=date#(GetFieldSelections(MonthEnd), 'MM YYYY')
由于
=
符号已经对其进行了评估并返回了日期。
因此,当在我的集合表达式中使用
$(=vEndMonth)
时,我尝试评估日期,但我尝试了错误的方式。
如果我的变量没有计算到位,我必须在集合表达式中进行计算。
所以其他解决方案是:
变量如(没有
=
符号):
date#(GetFieldSelections(MonthEnd), 'MM YYYY')
date#(GetFieldSelections(MonthStart), 'MM YYYY')
并设置表达式如下:
Sum(
{$<
%date = {">=$(=$(MonthStart))<$(=$(MonthEnd))"}
>}
[turnover])