繁体   English   中英

如何使用用户可以在 getFields 的计算字段中更新的参数(Data Studio 社区连接器)

[英]How to use a parameter which a user can update in a calculated field in getFields (Data Studio Community Connector)

我有一个 select 参数,我在 getConfig() 的数据工作室社区连接器中定义如下。 然后将该参数用作报表中的下拉数据控件。

config
    .newSelectSingle()
    .setId("characteristic_selected")
    .setName("Characteristic selected")
    .addOption(
        config
          .newOptionBuilder()
          .setLabel("a")
          .setValue("a")
    )
    .addOption(
      config
        .newOptionBuilder()
        .setLabel("b")
        .setValue("b")
    )
    .addOption(
      config
        .newOptionBuilder()
        .setLabel("c")
        .setValue("c")
    )
    .addOption(
      config
        .newOptionBuilder()
        .setLabel("d")
        .setValue("d")
    )
    .addOption(
      config
        .newOptionBuilder()
        .setLabel("e")
        .setValue("e")
    )
    .setAllowOverride(true);

在 getFields() 中,我定义了 Characteristic,然后从数据库 a、b、c、d 或 e 返回数据:

  fields.newDimension()
    .setId('Characteristic')
    .setType(types.TEXT);

我正在尝试定义一个计算字段,然后将其用作图表和表格中的过滤器,以仅显示用户在下拉数据控件中选择的选项的数据。 例如,如果用户选择“b”,那么只有标记为“b”的数据才会显示。

我的尝试(受到此处答案的启发: 如何在 getFields()(Google Data Studio 社区连接器)中定义的计算字段中使用参数? )是:

  fields.newDimension()
    .setId('Characteristic calc')
    .setDescription('Sets true if characteristic selected in dropdown is the same as the characteristic dimension field')
    .setFormula('$Characteristic = "' + request.configParams.characteristic_selected + '"')
    .setType(types.BOOLEAN);

然后我对表格和图表应用过滤器,仅包含 Characteristic calc = True

默认值为“a”。 当我第一次加载页面时,数据过滤正确,只显示“a”。 但是,当我从下拉数据控件中选择 select "b" 时,它仍然只显示 "a" 的数据。 在报告中更改时,代码似乎没有捕获更新的 configParam。

注意:如果我在报告中而不是在数据工作室连接器中设置计算字段,那么它可以正常工作。 但是,我在很多报告中都使用了连接器,因此每次创建新报告时都必须创建计算字段,这很烦人。

抱歉,只有在源配置期间才设置参数时,使用.setFormula才有效。 如果用户可以在报告中更改它,则必须在function getSchema(request)中完成字段计算。

function getSchema(request) {
  var fields = cc.getFields();
  var types = cc.FieldType;
 fields.newDimension()
    .setId('Characteristic_info_info')
    .setDescription('tempory field')
    .setType(types.TEXT);
 fields.newDimension()
    .setId('Characteristic calc')
    .setDescription('Sets true if characteristic selected in dropdown is the same as the characteristic dimension field')
    .setFormula('$Characteristic = $Characteristic_info_info')
    .setType(types.BOOLEAN);

然后在这个 function 中将列设置为正确的值:

function getData(request) {
....
  var schemaE = getFields(request).forIds(
    request.fields.map(function(field) {
      return field.name;
    })
  ).build();

  var out1=[];
  schemaE.forEach(a=>out1.push(a.name in params ? params[a.name] : 'nope:'+a.name ));

  var out= {
    schema: schemaE,
    rows: [{values:out1},{values:out1},{values:out1}] 
  };
console.log(schemaE)

console.log(request.configParams.characteristic_selected)

for(let col in schemaE){
if(schemaE[col].name=="Characteristic_info_info"){
for(let i in out.rows)
 {
   out.rows[i].values[col]=request.configParams.characteristic_selected+"!";
 }
}
}
  return out;
}

如果可以在.setFormula中使用参数而不仅仅是$用于字段,那么生活会容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM