簡體   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