إنشاء قائمة منسدلة تفاعلية لمعلمات Tableau باستخدام JavaScript API

Temp mail SuperHeros
إنشاء قائمة منسدلة تفاعلية لمعلمات Tableau باستخدام JavaScript API
إنشاء قائمة منسدلة تفاعلية لمعلمات Tableau باستخدام JavaScript API

دمج المعلمات التي يحركها المستخدم في لوحات المعلومات المضمنة في Tableau

يتيح تضمين لوحات معلومات Tableau داخل تطبيقات الويب باستخدام Tableau Embedding API للمطورين تقديم حلول ديناميكية تعتمد على البيانات. إحدى الطرق الفعالة لتحسين تجربة المستخدم هي تمكين التفاعل مع معلمات لوحة المعلومات من خلال القوائم المنسدلة.

في هذا المثال، يكمن التحدي في تكوين قائمة منسدلة لمعالجة معلمة Tableau معينة تسمى "مويدا". على عكس المرشحات، التي يسهل دمجها، تتطلب المعلمات معالجة دقيقة للتحميل والتحديث بشكل صحيح باستخدام JavaScript.

على الرغم من أن واجهة برمجة تطبيقات Tableau توفر طرقًا للوصول إلى المعلمات، إلا أنه قد يكون من الصعب عرض قيم المعلمات المتاحة بشكل صحيح كخيارات منسدلة وضمان التحديثات السلسة عندما يقوم المستخدمون بالاختيار.

الهدف من هذه المقالة هو إرشادك خلال خطوات إعداد "مويدا" المعلمة مع القائمة المنسدلة. سوف تتعلم كيفية جلب القيم المسموح بها وعرضها في القائمة المنسدلة والتأكد من تحديث المعلمات بشكل فعال عند إجراء التحديد، مما يؤدي إلى حل المشكلات الشائعة التي يواجهها المطورون.

يأمر مثال للاستخدام
viz.workbook.getParametersAsync() تقوم هذه الطريقة غير المتزامنة باسترداد قائمة بجميع المعلمات المتوفرة في مصنف Tableau. من الضروري تحميل بيانات المعلمات ديناميكيًا قبل التفاعل معها في لوحة المعلومات المضمنة.
viz.workbook.changeParameterValueAsync() يقوم بتحديث قيمة معلمة معينة في Tableau. فهو يضمن أنه عندما يقوم المستخدم بتغيير تحديد القائمة المنسدلة، يتم تحديث المعلمة الموجودة في المصنف في الوقت الفعلي.
allowableValues تحتوي هذه الخاصية على القيم المسموح بها لمعلمة Tableau. يتم استخدامه لملء القائمة المنسدلة بجميع خيارات المعلمات الصالحة التي يمكن للمستخدمين الاختيار من بينها.
currentValue.value الوصول إلى القيمة الحالية لمعلمة Tableau. وهذا يضمن أن التحديد الافتراضي للقائمة المنسدلة يطابق الحالة الحالية للمعلمة في لوحة المعلومات.
document.createElement("select") ينشئ عنصر القائمة المنسدلة
dropdown.addEventListener("change") يضيف مستمع الأحداث إلى القائمة المنسدلة لاكتشاف تغييرات اختيار المستخدم. عند تشغيله، فإنه يبدأ عملية تحديث المعلمة في مصنف Tableau.
find((p) =>find((p) => p.name === "Moeda") يستخدم طريقة البحث () في صفيف المعلمات لتحديد موقع معلمة "Moeda" المحددة. وهذا يضمن استهداف المعلمة الصحيحة للتحديثات.
viz.addEventListener(TableauEventType.FirstInteractive) يضمن هذا الأمر أن وظيفة تحميل القائمة المنسدلة للمعلمات يتم تنفيذها فقط بمجرد تحميل لوحة معلومات Tableau بالكامل، مما يؤدي إلى تجنب مشكلات التوقيت.
option.value = value.value يضبط سمة القيمة لعنصر
jest.fn().mockResolvedValue() تستخدم في اختبارات الوحدة للسخرية من سلوك الوظائف غير المتزامنة. يضمن ذلك محاكاة منطق تحديث المعلمة بشكل صحيح أثناء الاختبار دون الحاجة إلى بيئة Tableau مباشرة.

كيفية التحكم ديناميكيًا في معلمات اللوحة باستخدام JavaScript

تم تصميم البرامج النصية المذكورة أعلاه لتمكين التفاعل السلس بين لوحة معلومات Tableau وHTML المخصص اسقاط قائمة طعام. تستخدم هذه البرامج النصية واجهة برمجة تطبيقات Tableau Embedding، التي تسمح للمطورين بتضمين لوحات معلومات Tableau داخل تطبيقات الويب وتوسيع نطاق تفاعلها. ينصب التركيز الأساسي على معالجة المعلمة المسماة "Moeda" من خلال JavaScript عن طريق جلب قيمها المسموح بها وتحديث المعلمة ديناميكيًا عندما يقوم المستخدم بالاختيار.

يبدأ الجزء الأول من البرنامج النصي بوظيفة تحميل معلمة "Moeda". تعمل هذه الوظيفة على الاستفادة من getParametersAsync() طريقة لاسترداد كافة المعلمات المتوفرة في المصنف. بمجرد تحميل المعلمات، يحدد البرنامج النصي معلمة "Moeda" المحددة باستخدام ملف يجد() طريقة. إذا لم يتم العثور على المعلمة، فسيتم تسجيل خطأ لتجنب كسر بقية التعليمات البرمجية. وهذا أمر بالغ الأهمية لأن العمل مع المعلمات يتطلب معرفة ما إذا كانت موجودة قبل الشروع في المزيد من المنطق.

بعد تحديد المعلمة أ اسقاط يتم إنشاء القائمة ديناميكيًا باستخدام أساليب معالجة DOM الخاصة بـ JavaScript. تتم إضافة كل قيمة من القيم المسموح بها للمعلمة كخيار ضمن القائمة المنسدلة. يضمن البرنامج النصي أن القائمة المنسدلة تعكس الحالة الحالية للمعلمة عن طريق تعيين الخيار المحدد على القيمة الحالية للمعلمة. تعتبر هذه الخطوة ضرورية لضمان رؤية المستخدم لأحدث قيمة في لوحة المعلومات، مما يوفر الاتساق بين حالة لوحة المعلومات والخيار الافتراضي للقائمة المنسدلة.

يتضمن الجزء الأخير من البرنامج النصي إضافة مستمع للحدث إلى القائمة المنسدلة. يكتشف مستمع الأحداث هذا عندما يقوم المستخدم بتغيير الخيار المحدد ويقوم بتشغيل تغيير المعلمةValueAsync () وظيفة لتحديث المعلمة في Tableau. بالإضافة إلى ذلك، يتأكد البرنامج النصي من عرض القائمة المنسدلة فقط بعد تحميل لوحة المعلومات بالكامل باستخدام FirstInteractive حدث. ويضمن ذلك عدم ملء القائمة المنسدلة قبل الأوان، مما يمنع الأخطاء أو فقدان قيم المعلمات. الحل عبارة عن وحدات وقابلة للتطوير، مما يجعل من السهل التكيف مع المعلمات أو لوحات المعلومات الأخرى عن طريق إعادة استخدام نفس البنية المنطقية.

إنشاء قائمة منسدلة تفاعلية للتحكم في معلمات اللوحة

استخدام JavaScript مع Tableau Embedding API لتحميل المعلمات وتحديثها ديناميكيًا

// Solution 1: Basic Implementation Using Async/Await and Tableau API
async function loadMoedaParameter() {
  try {
    const parameters = await viz.workbook.getParametersAsync();
    const moedaParam = parameters.find((p) => p.name === "Moeda");
    if (!moedaParam) {
      console.error("Parameter 'Moeda' not found!");
      return;
    }
    const dropdown = document.createElement("select");
    moedaParam.allowableValues.forEach((value) => {
      const option = document.createElement("option");
      option.text = value.formattedValue;
      option.value = value.value;
      dropdown.appendChild(option);
    });
    dropdown.value = moedaParam.currentValue.value;
    dropdown.addEventListener("change", async (e) => {
      const selectedMoeda = e.target.value;
      try {
        await viz.workbook.changeParameterValueAsync("Moeda", selectedMoeda);
        console.log("Moeda changed to:", selectedMoeda);
      } catch (error) {
        console.error("Error changing the Moeda parameter:", error);
      }
    });
    document.getElementById("Moeda-container-desktop").appendChild(dropdown);
  } catch (error) {
    console.error("Error loading the Moeda parameter:", error);
  }
}
viz.addEventListener(TableauEventType.FirstInteractive, loadMoedaParameter);

تنفيذ منطق القائمة المنسدلة المعيارية لتحديثات معلمات اللوحة

النهج الأمثل باستخدام الوظائف المعيارية والمعالجة المحسنة للأخطاء

// Solution 2: Modular and Reusable Code with Error Handling
function createDropdown(options, onChangeCallback) {
  const dropdown = document.createElement("select");
  dropdown.style.cssText = "border:none; width:100%; height:40px; background:#FFF;";
  options.forEach(({ text, value }) => {
    const option = document.createElement("option");
    option.text = text;
    option.value = value;
    dropdown.appendChild(option);
  });
  dropdown.addEventListener("change", (e) => onChangeCallback(e.target.value));
  return dropdown;
}

async function updateParameter(parameterName, value) {
  try {
    await viz.workbook.changeParameterValueAsync(parameterName, value);
    console.log(\`${parameterName} changed to: \${value}\`);
  } catch (error) {
    console.error("Error updating parameter:", error);
  }
}

async function loadParameterDropdown(containerId, parameterName) {
  try {
    const parameters = await viz.workbook.getParametersAsync();
    const param = parameters.find((p) => p.name === parameterName);
    if (!param) throw new Error(\`Parameter '\${parameterName}' not found!\`);
    const options = param.allowableValues.map((val) => ({
      text: val.formattedValue,
      value: val.value,
    }));
    const dropdown = createDropdown(options, (value) => {
      updateParameter(parameterName, value);
    });
    document.getElementById(containerId).appendChild(dropdown);
  } catch (error) {
    console.error("Error loading parameter dropdown:", error);
  }
}

viz.addEventListener(TableauEventType.FirstInteractive, () => {
  loadParameterDropdown("Moeda-container-desktop", "Moeda");
});

اختبار تفاعل معلمات التابلوه في بيئات مختلفة

كتابة اختبارات الوحدة باستخدام JavaScript للتحقق من صحة تحديثات المعلمات

// Solution 3: Unit Test to Validate Parameter Changes
function mockVizWorkbook() {
  return {
    parameters: [{
      name: "Moeda",
      allowableValues: [{ value: "USD", formattedValue: "USD" }],
      currentValue: { value: "USD" },
    }],
    changeParameterValueAsync: jest.fn().mockResolvedValue(),
  };
}

test("Dropdown updates Moeda parameter correctly", async () => {
  const vizMock = { workbook: mockVizWorkbook() };
  const updateSpy = vizMock.workbook.changeParameterValueAsync;
  document.body.innerHTML = '<div id="Moeda-container-desktop"></div>'; 

  await loadParameterDropdown("Moeda-container-desktop", "Moeda");
  const dropdown = document.querySelector("select");
  dropdown.value = "USD";
  dropdown.dispatchEvent(new Event("change"));

  expect(updateSpy).toHaveBeenCalledWith("Moeda", "USD");
});

أفضل الممارسات للتعامل مع معلمات Tableau باستخدام JavaScript

أثناء تضمين لوحات معلومات Tableau في تطبيقات الويب، غالبًا ما يحتاج المطورون إلى جعل المعلمات ديناميكية لتعزيز تفاعل المستخدم. أحد التحديات الرئيسية هو التعامل مع المعلمات مثل "مويدا" من خلال القائمة المنسدلة بدلاً من استخدام المرشحات. تعد المعلمات أكثر تعقيدًا لأنها تتطلب استدعاءات واجهة برمجة التطبيقات (API) لاسترداد قيمها المسموح بها وتحتاج إلى التحديث عبر وظائف، مثل تغيير المعلمةValueAsync (). يمنح هذا الأسلوب المستخدمين مزيدًا من التحكم في طرق عرض البيانات المحددة في لوحة المعلومات دون تحديث الصفحة.

تتضمن إدارة المعلمات في لوحات معلومات Tableau تحديدها بشكل صحيح getParametersAsync(). المشكلة الشائعة هي أن بعض المعلمات قد لا تكون متاحة أو قد تحتاج إلى مستويات وصول مختلفة اعتمادًا على تكوين المصنف. لذلك، من المهم تضمين معالجة الأخطاء لمنع منطق القائمة المنسدلة من التعطل إذا لم يتم العثور على معلمة. هناك جانب آخر يجب مراعاته وهو عرض القائمة المنسدلة فقط بعد تحميل لوحة المعلومات بالكامل. باستخدام FirstInteractive يضمن الحدث أن عناصر لوحة المعلومات جاهزة قبل تطبيق التخصيصات.

يعد تحسين الأداء أمرًا بالغ الأهمية أيضًا، خاصة عند التعامل مع مجموعات البيانات الكبيرة أو لوحات المعلومات ذات المعلمات المتعددة. وظائف جافا سكريبت مثل يجد() المساعدة في تضييق نطاق البحث عن المعلمات، ولكن يجب أن يظل الكود معياريًا للسماح بقابلية التوسع في المستقبل. يجب على المطورين أيضًا التحقق من صحة قيم المعلمات قبل تحديثها لتجنب التناقضات بين واجهة المستخدم وبيانات لوحة المعلومات. باستخدام هذه الاستراتيجيات، يصبح من الأسهل إدارة معلمات Tableau بكفاءة وإنشاء لوحات معلومات مع تجربة مستخدم سلسة.

الأسئلة المتداولة حول استخدام المعلمات في Tableau API

  1. ما الفرق بين المعلمة والمرشح في Tableau؟
  2. تسمح المعلمات للمستخدمين بتمرير قيم محددة إلى لوحة المعلومات، بينما تحدد المرشحات البيانات المعروضة بناءً على المعايير. تعمل عوامل التصفية على مجموعات البيانات، بينما تؤثر المعلمات على حقول أو حسابات محددة.
  3. لماذا تظل القائمة المنسدلة فارغة عند جلب المعلمات؟
  4. تأكد من getParametersAsync() تقوم الدالة باسترداد المعلمة بنجاح. إذا لم يحدث ذلك، فقد تكون المعلمة مخفية أو لا يمكن الوصول إليها بسبب قيود المصنف.
  5. كيف أتأكد من مطابقة القائمة المنسدلة للحالة الحالية للمعلمة؟
  6. استخدم currentValue.value الخاصية لتعيين الخيار الافتراضي في القائمة المنسدلة. يؤدي هذا إلى الحفاظ على محاذاة واجهة المستخدم ولوحة المعلومات.
  7. كيف يمكنني معالجة الأخطاء عند تحديث المعلمات في Tableau؟
  8. لف changeParameterValueAsync() اتصل داخل أ try-catch block لمعالجة أية أخطاء تحدث عند تحديث المعلمة.
  9. ما الحدث الذي يضمن أن لوحة المعلومات جاهزة قبل التخصيص؟
  10. ال FirstInteractive يشير الحدث في Tableau API إلى أن لوحة المعلومات قد تم تحميلها بالكامل وأنها جاهزة لمزيد من التفاعلات مثل إضافة قائمة منسدلة.

الأفكار النهائية حول التعامل مع المعلمات التفاعلية

يوفر تضمين لوحات المعلومات التفاعلية مع القوائم المنسدلة ذات المعلمات مرونة أكبر للمستخدمين. من خلال الإعداد المناسب، يمكن للمطورين جلب معلمات مثل مويدا واستخدم Tableau API لتحسين التحكم في لوحة المعلومات. يتيح هذا الإعداد للمستخدمين استكشاف البيانات بشكل أكثر فعالية.

العناصر الأساسية مثل FirstInteractive الحدث والتعامل القوي مع الأخطاء، تأكد من أن القوائم المنسدلة تعمل بسلاسة داخل التطبيق. ومن خلال اتباع هذا النهج، يمكن للمطورين إدارة المعلمات بكفاءة وتقديم تجربة لوحة معلومات ديناميكية وسريعة الاستجابة للمستخدمين النهائيين.

المصادر والمراجع الخاصة بتنفيذ معلمات التابلوه
  1. تمت الإشارة إلى تفاصيل حول تضمين لوحات المعلومات والتفاعل مع المعلمات من المسؤول وثائق Tableau JavaScript API .
  2. رؤى حول مستمعي الأحداث، مثل FirstInteractive، تم استخلاصها من الأمثلة الموجودة في منتدى مجتمع تابلو .
  3. تم أخذ المفاهيم العامة وأفضل الممارسات للعمل مع عناصر واجهة المستخدم الديناميكية في JavaScript مستندات ويب MDN .