Встраивание javascript в Power Query через функцию Web.Page

Рейтинг: -1Ответов: 1Опубликовано: 15.01.2023

Содержание задачи:

  • a = "100,500,0,0,2000,0,1000" ; - строка
  • b = 1000; - число
  • delim = " , " ;
  • Найти: result (т.е. в переменной result должна получиться после вычислений новая строка "0,0,0,0,1600,0,1000")

алгоритм решения простыми словами:

  1. переменную а преобразую в массив arr (переменная delim используется в преобразовании);
  2. создаю новый массив newarr, куда будут добавляться новые значения;
  3. от значения переменной b (1000) вычитаю первый элемент массива arr, получается 900 (положительная разность), поэтому значение первого элемента массива newarr равно 0, значение переменной b равно 900;
  4. от значения переменной b (900) вычитаю второй элемент массива arr, получается 400 (положительная разность), поэтому значение второго элемента массива newarr равно 0,значение переменной b равно 400;
  5. в результате вычислений с третьим и четвертым элементом массива arr получаем значения равные 0 (т.е. без изменений);
  6. пятый элемент массива newarr получает абсолютное значение 1600,значение переменной b равно о и вычисления прерываются;
  7. провожу конкатенацию массивов: newarr и arr (шестого и седьмого элемента)

Но я не могу увидеть результат в Power Query. При разворачивании таблицы отсутствует элемент BODY. В чем причина его отсутствия? введите сюда описание изображения

**

let   fx=(a as text, b, delim as text)=>
    
 Web.Page(
        "<script>
             var x = '"& a &"';
             var y = '"& Text.From(b) &"';
             var z = '"& delim &"'; 
             var arr = x.split(z);
             var arrnew = [];
             if (y > 0) {
                for (let i of arr) {
                    if ((y-i) < 0) {
                       i = -(y-i);
                       arrnew.push(i);
                       break;
                    }  
 
               y = y-i;
               i = 0;
               arrnew.push(i);
               }
            }
            arr.splice(0, arrnew.length);     
            var result = arrnew.concat(arr).join(z);
            document.write(result);       
          </script>")
in
fx

**

Ответы

▲ 0

Вопрос решен. Использовала цикл for(..;..;..), вместо for..of

let   
  fx=(a as text, b as number, delim as text)=>   
    Web.Page(
        "<script>
             x = '"& Text.From (a) &"';
             y = '"& Text.From (b) &"';
             z = '"& Text.From (delim) &"'; 
             arr = x.split(z);
             arrnew = [];
             if (y > 0) {
               for (i = 0; i < arr.length; i++) {
                    if ((y-arr[i]) < 0) {
                       arr[i] = -(y-arr[i]);
                       arrnew.push(arr[i]);
                       break;
                    }  

               y = y-arr[i];
               arr[i] = 0;
               arrnew.push(arr[i]);
               }
            }
            arr.splice(0, arrnew.length);     
            result = arrnew.concat(arr).join(z);
            document.write(result);       
         </script>")
in
fx